Articles of 拆卸

为什么在反汇编代码中有一些“无意义的”内存插槽?

我使用objdump来反汇编32位Linux上的一些ELF文件。 asm文件是英特尔格式。 在反汇编文件中,我注意到像下面的一些内存插槽: 80483ed: c7 44 24 18 07 00 00 mov DWORD PTR [esp+0x18],0x7 80483f4: 00 80483f5: c7 44 24 1c 0c 00 00 mov DWORD PTR [esp+0x1c],0xc 80483fc: 00 80483fd: c7 44 24 20 01 00 00 mov DWORD PTR [esp+0x20],0x1 8048404: 00 8048405: c7 44 24 24 fe ff ff mov DWORD […]

如何在elf文件中获得用户定义的函数范围(开始和结束地址)?

我知道我们可以通过读取符号表来获得用户定义的函数在elf中的开始地址,就像下面的函数main和foo: 08048330 T _start 0804a014 b completed.6159 0804a00c W data_start 0804a018 b dtor_idx.6161 080483e4 T foo 080483c0 t frame_dummy 080483ee T main 但如何获得某些function的结束地址? 任何人都可以给我一些帮助吗? 谢谢!

objdump默认哪个部分反汇编

我目前正在构build一个可执行的裸机,其中包含一些包含代码的特殊部分。 但是,当我做objdump -d .init.text我只获得.text和.init.text部分的代码。 objdump的联机帮助页仅表示在使用-d选项时,它“仅反汇编那些预期包含指令的部分”。 这些部分是什么,以及objdump如何告诉哪些部分解码? 我知道我也可以使用-D选项来获得所有部分的完整解码,但这通常比我需要的要多得多。

“BL”arm指令拆卸如何工作?

'bl'或带链接指令的分支几乎总是变成0xebfffffe 然而,处理器和GNU binutils objdump莫名其妙地知道在哪里分支: 00000000 <init_module>: 0: e1a0c00d mov ip, sp 4: e92ddff0 push {r4, r5, r6, r7, r8, r9, sl, fp, ip, lr, pc} 8: e24cb004 sub fp, ip, #4 c: e24dd038 sub sp, sp, #56 ; 0x38 10: ebfffffe bl 0 <init_module> 14: e59f0640 ldr r0, [pc, #1600] ; 65c <init_module+0x65c> 18: ebfffffe […]

从编译的DLL获取函数信息

我有一个编译的DLL,我没有它的源代码了。 我唯一需要从DLL提供的function,以及如何访问它们,即它们的签名。 我怎样才能做到这一点?