逐步通过反汇编的i386代码(原始机器代码 - 没有任何类型的标题)

时间:2017-05-12 21:38:47

标签: gcc assembly ld i386 linker-errors

我相信this代码是i386汇编。

如何在Mac,Linux或Windows上单步执行代码? (或在可能的情况下在线)

我假设我需要使用链接器为上述平台创建合适的可执行文件。

1 个答案:

答案 0 :(得分:1)

汇编程序和链接程序,是的。

对于linux,如果你不坚持字节,只需将汇编代码(除前两列之外的东西)复制到标题行foo.s之后的文件.intel_syntax noprefix中,然后执行{{ 1}}您将获得可加载到gcc -g -nostdlib -m32 foo.s的可执行文件a.out

gdb

请注意,此代码将跳转到此粘贴中未包含的其他地址,因此它几乎没用。而且,它很简单,你几乎不需要单独执行它。基本上是这样的:

.intel_syntax noprefix
mov eax,0x0
mov ebx,0xbaaeb662
xor eax,ebx
mov ecx,0xc0ffee
mov edx,0xdeadbeef
cmp eax,0x31337
je loc_0000001f
jmp edx
loc_0000001f:
jmp ecx

(我假设零是一个占位符。)

如果你坚持使用原始机器代码字节,你可以将它们放在你的if (0 ^ 0xbaaeb662 == 0x31337) goto 0xc0ffee else goto 0xdeadbeef; foo.s指令中,如下所示:

.byte

你明白了,我不打算把所有这些都输出来。