gpt4 book ai didi

汇编/反汇编指令操作数

转载 作者:行者123 更新时间:2023-12-02 05:53:46 25 4
gpt4 key购买 nike

看《The Shellcoder's Handbook》中的一些汇编和反汇编代码,发现一条指令的序列操作数是不一样的。

例如,在 assembly 上:

mov ebx,0

并且,在反汇编时:

mov 0,ebx

为什么会这样?

最佳答案

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

例如,x86 的两种常见表示法(Intel 和 AT&T)颠倒了操作数的顺序,例如:

mov  ebx, 0     ; Intel
mov $0, %ebx ; AT&T

这两个意思相同,将 ebx 寄存器设置为零。

在您引用的 Shellcoder 手册中,所使用的工具使用两种不同的表示法。例如,在一页(我的版本中的第 39 页)上,您会看到以下文字:


Let's write these three steps in assembly. We can then get an ELF binary; from this file we can finally extract the opcodes.

Section .text
global _start
_start:
mov ebx,0
mov eax,1
int 0x80

Now we want to use the nasm assembler to create our object file, and then use the GNU linker to link object files:

[slap@0day root] nasm -f elf exit_shellcode.asm
[slap@0day root] ld -o exit_shellcode exit_shellcode.o

Finally, we are ready to get our opcodes. In this example, we will use objdump. The objdump utility is a simple tool that displays the contents of object files in human readable form. It also prints out the opcode nicely when displaying contents of the object file, which makes it useful in designing shellcode. Run our program through objdump, like this:

[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 需要 Intel 符号,但 objdump 产生 AT&T 符号.您只需要习惯它们之间的差异即可。

关于汇编/反汇编指令操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5672989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com