Assembly 汇编/反汇编指令操作数

Assembly 汇编/反汇编指令操作数,assembly,Assembly,查看《Shellcoder手册》中的一些汇编和反汇编代码,我发现指令的顺序操作数不同 例如,在装配上: mov ebx,0 拆卸时: mov ebx,0 mov 0,ebx 为什么会这样?可能是您的汇编程序或反汇编程序有问题,或者是符号不匹配 例如,x86(Intel和AT&T)的两种常用符号颠倒了操作数的顺序,如: mov ebx, 0 ; Intel mov $0, %ebx ; AT&T 这两者的意思相同,将ebx寄存器设置为零 在您参考的Shellcode

查看《Shellcoder手册》中的一些汇编和反汇编代码,我发现指令的顺序操作数不同

例如,在装配上:

mov ebx,0
拆卸时:

mov ebx,0
mov 0,ebx

为什么会这样?

可能是您的汇编程序或反汇编程序有问题,或者是符号不匹配

例如,x86(Intel和AT&T)的两种常用符号颠倒了操作数的顺序,如:

mov  ebx, 0     ; Intel
mov  $0, %ebx   ; AT&T
这两者的意思相同,将
ebx
寄存器设置为零

在您参考的Shellcoder手册中,使用的工具使用了两种不同的符号。例如,在一页(我的版本第39页)上,您可以看到以下文本:


让我们在汇编中编写这三个步骤。然后我们可以得到一个ELF二进制文件;我们最终可以从这个文件中提取操作码

现在我们想使用
nasm
汇编程序创建我们的目标文件,然后使用GNU链接器链接目标文件:

最后,我们准备好获取操作码。在本例中,我们将使用
objdump
objdump
实用程序是一个简单的工具,它以人类可读的形式显示对象文件的内容。它还可以在显示对象文件的内容时很好地打印操作码,这在设计外壳代码时非常有用。通过
objdump
运行我们的程序,如下所示:

[slap@0dayroot]objdump-d退出外壳代码
退出外壳代码:文件格式elf32-i386
第节的分解。正文:
08048080 :
8048080:bb 00 mov$0x0,%ebx
8048085:b8 01 00 mov$0x1,%eax
804808a:cd 80整型$0x80

从这一点上,您可以非常清楚地看到,
nasm
期望使用Intel表示法,但
objdump
产生AT&T表示法。你只需要习惯它们之间的差异

[slap@0day root] nasm -f elf exit_shellcode.asm
[slap@0day root] ld -o exit_shellcode exit_shellcode.o
[slap@0day root] objdump -d exit_shellcode
exit_shellcode:file format elf32-i386
Disassembly of section .text:
08048080 <.text>:
8048080: bb 00 00 00 00 mov $0x0,%ebx
8048085: b8 01 00 00 00 mov $0x1,%eax
804808a: cd 80          int $0x80