草庐IT

disassembly

全部标签

linux - 在 IDA 中使用参数调试可执行文件

在反汇编器和调试器IDA中,有什么方法可以使用命令行参数运行当前加载的二进制文件?例如,假设我有命令/bin/ls并想将其调试为/bin/lstest.txt,我如何在IDA中执行此操作? 最佳答案 转到Debugger/Processoptions...菜单项并在Parameterstest.txt参数字段。可执行文件(包括二进制文件)的路径将在Application字段中。 关于linux-在IDA中使用参数调试可执行文件,我们在StackOverflow上找到一个类似的问题:

linux - 'BL' arm指令反汇编如何工作?

'bl'或带有链接指令的分支几乎总是变成0xebfffffe但是,处理器和GNUbinutilsobjdump以某种方式知道分支位置:00000000:0:e1a0c00dmovip,sp4:e92ddff0push{r4,r5,r6,r7,r8,r9,sl,fp,ip,lr,pc}8:e24cb004subfp,ip,#4c:e24dd038subsp,sp,#56;0x3810:ebfffffebl014:e59f0640ldrr0,[pc,#1600];65c18:ebfffffebl74他们怎么知道的? 最佳答案 问题是由于

linux - 'BL' arm指令反汇编如何工作?

'bl'或带有链接指令的分支几乎总是变成0xebfffffe但是,处理器和GNUbinutilsobjdump以某种方式知道分支位置:00000000:0:e1a0c00dmovip,sp4:e92ddff0push{r4,r5,r6,r7,r8,r9,sl,fp,ip,lr,pc}8:e24cb004subfp,ip,#4c:e24dd038subsp,sp,#56;0x3810:ebfffffebl014:e59f0640ldrr0,[pc,#1600];65c18:ebfffffebl74他们怎么知道的? 最佳答案 问题是由于

c - 理解一个简单的 C 程序生成的汇编代码

我试图通过使用gdb的反汇编器检查一个简单的C程序来理解它的汇编级代码。以下是C代码:#includevoidfunction(inta,intb,intc){charbuffer1[5];charbuffer2[10];}voidmain(){function(1,2,3);}以下是main的反汇编代码和functiongdb)disassmainDumpofassemblercodeforfunctionmain:0x08048428:push%ebp0x08048429:mov%esp,%ebp0x0804842b:and$0xfffffff0,%esp0x0804842e:su

c - 理解一个简单的 C 程序生成的汇编代码

我试图通过使用gdb的反汇编器检查一个简单的C程序来理解它的汇编级代码。以下是C代码:#includevoidfunction(inta,intb,intc){charbuffer1[5];charbuffer2[10];}voidmain(){function(1,2,3);}以下是main的反汇编代码和functiongdb)disassmainDumpofassemblercodeforfunctionmain:0x08048428:push%ebp0x08048429:mov%esp,%ebp0x0804842b:and$0xfffffff0,%esp0x0804842e:su

c++ - 使用大数组索引增加访问时间

问题我目前编写了一个包含大数组的程序,我对不同数组的处理时间感到非常困惑。一方面我有7个“较小”的数组(我只想增加循环中的各种元素。每个循环我都会在每个数组的相同索引处增加元素。这意味着我想在同一索引处增加所有14个数组的每个循环。这需要21秒。如果我只增加7个较小的数组,它只需要2秒,如果我只增加7个较大的数组,则需要18秒!为了更好地说明,我编写了一个示例代码:#include#includeusingnamespacestd;intmain(intargc,char*argv[]){inti;int*ExampleArray1=newint[16384];//3"small"ar

c++ - 使用大数组索引增加访问时间

问题我目前编写了一个包含大数组的程序,我对不同数组的处理时间感到非常困惑。一方面我有7个“较小”的数组(我只想增加循环中的各种元素。每个循环我都会在每个数组的相同索引处增加元素。这意味着我想在同一索引处增加所有14个数组的每个循环。这需要21秒。如果我只增加7个较小的数组,它只需要2秒,如果我只增加7个较大的数组,则需要18秒!为了更好地说明,我编写了一个示例代码:#include#includeusingnamespacestd;intmain(intargc,char*argv[]){inti;int*ExampleArray1=newint[16384];//3"small"ar

c++ - 段错误 : and the disassembly is different between objdump and gdb

[深呼吸。]我们有一个使用WxMotif2.6.3弹出窗口的应用程序(GUI库过去不是——现在也不是——我的选择)。它在32位ix86系统上运行良好。我的任务是将它转换为64位应用程序。它总是出现段错误。我在RHEL6上,所以我使用gcc4.4.7编译。在咬牙切齿之后,问题似乎很明显:在wxFrame::DoCreate中,m_mainWidget被设置(正确);在wxFrame::GetMainWidget中,它作为空指针返回。空指针导致崩溃。使用gdb,设置m_mainWidget的指令是mov%rax,0x1e0(%rdx)#$rdx=0x68b2f0而获取m_mainWidge

linux - 为 ARM 架构使用 objdump : Disassembling to ARM

我有一个目标文件,正在尝试反汇编它。当我使用时:objdump-dexample.o我得到一个文件格式为elf64-x86-64的程序集。我正在尝试将其反汇编为ARM,我该怎么做? 最佳答案 如果你想反汇编ARM代码,你最好有一个ARM工具链,这是我得到的:http://bb.osmocom.org/trac/wiki/toolchain有了这个之后,你就可以使用arm-elf-objdump而不是objdump。我使用的命令是arm-elf-objdump-D-bbinary-marmbinaryfile.dat如果查看联机帮助页

linux - 如何反汇编、修改然后重新组装 Linux 可执行文件?

无论如何,这可以做到吗?我使用了objdump,但这不会产生我所知道的任何汇编程序都可以接受的汇编输出。我希望能够更改可执行文件中的指令,然后再对其进行测试。 最佳答案 我认为没有任何可靠的方法可以做到这一点。机器码格式非常复杂,比汇编文件更复杂。实际上不可能获取已编译的二进制文件(例如,ELF格式)并生成将编译为相同(或足够相似)二进制文件的源汇编程序。要了解这些差异,请将GCC直接编译到汇编器的输出(gcc-S)与objdump在可执行文件上的输出(objdump-D)进行比较。我能想到两个主要的并发症。首先,由于指针偏移等原因