所以基本上我objdump
在 32 位 x86 Linux 上使用,反汇编一些由编译的静态链接二进制文件gcc
在反汇编的汇编代码中,我发现:
80ade23: 74 01 je 0x80ade26
80ade25: f0 0f c1 16 lock xadd %edx,(%esi) // lock
80ade29: 89 54 24 14 mov %edx,0x14(%esp)
80ade2d: 8b 54 24 14 mov 0x14(%esp),%edx
80ade31: 3b 15 f0 0e 0f 08 cmp 0x80f0ef0,%edx
80ade37: 73 75 jae 0x80adeae
80ade39: 65 83 3d 0c 00 00 00 cmpl $0x0,%gs:0xc
80ade40: 00
80ade41: 74 01 je 0x80ade44
80ade43: f0 0f c1 0d dc 0e 0f lock xadd %ecx,0x80f0edc // lock
80ade4a: 08
所以基本上,在我的理解中,lock
是 x86 asm 操作码的前缀,在这里是合法的。
并且似乎是je
紧接着就跳入了这个位置lock
。
所以这里是我的问题:
反汇编结果
objdump
是否正确?很少看到objdump
生成这种“跳转到指令”的 asm 代码..(无论如何,我是逆向工程的新手,所以...... :))那么如何调整它以使其重新组装?
我尝试用这种方式改变它并使用gcc
它重新组装它,它可以通过组装过程,但我真的不知道它是否是正确的方法。
je S_0x80ade26
lock
S_0x80ade26: xadd %edx,(%esi) // lock