首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编/反汇编指令操作数

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

Stack Overflow用户
提问于 2011-04-15 14:09:00
回答 1查看 1.3K关注 0票数 2

查看“外壳编码器手册”中的一些汇编和反汇编代码,我发现指令的顺序操作数并不相同。

例如,在部件上:

代码语言:javascript
复制
mov ebx,0

并且,在反汇编时:

代码语言:javascript
复制
mov 0,ebx

为何会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-15 14:11:19

要么是你的汇编器或反汇编器有问题,要么是符号不匹配。

例如,x86的两个常用表示法(英特尔和AT&T)颠倒了操作数的顺序,例如:

代码语言:javascript
复制
mov  ebx, 0     ; Intel
mov  $0, %ebx   ; AT&T

这两种方法都意味着将ebx寄存器设置为零。

在您引用的Shellcoder's Handbook中,所使用的工具使用了两种不同的符号。例如,在一个页面上(在我的版本中是第39页),您会看到这样的文本:

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

代码语言:javascript
复制
Section .text
global _start
_start:
    mov ebx,0
    mov eax,1
    int 0x80

现在,我们要使用nasm汇编程序来创建目标文件,然后使用

链接器来链接目标文件:

代码语言:javascript
复制
[slap@0day root] nasm -f elf exit_shellcode.asm
[slap@0day root] ld -o exit_shellcode exit_shellcode.o

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

代码语言:javascript
复制
[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

由此,您可以清楚地看到,nasm期望使用英特尔表示法,而objdump使用AT&T表示法。你只需要习惯于它们之间的差异。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5672989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档