看一下"Shellcoder的手册"中的一些汇编和反汇编代码,我发现指令的序列操作数是不一样的.
例如,在组装时:
mov ebx,0
Run Code Online (Sandbox Code Playgroud)
并且,在拆卸时:
mov 0,ebx
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
pax*_*blo 12
你的汇编程序或反汇编程序有什么问题,或者表示法中存在简单的不匹配.
例如,x86(Intel和AT&T)的两个常用符号颠倒了操作数的顺序,例如:
mov ebx, 0 ; Intel
mov $0, %ebx ; AT&T
Run Code Online (Sandbox Code Playgroud)
这两个意思相同,将ebx寄存器设置为零.
在您引用的Shellcoder手册中,使用的工具使用两种不同的表示法.例如,在一个页面上(我的版本中第39页),您会看到以下文字:
让我们在汇编中写下这三个步骤.然后我们可以得到一个ELF二进制文件; 从这个文件中我们可以最终提取操作码.
Section .text
global _start
_start:
mov ebx,0
mov eax,1
int 0x80
Run Code Online (Sandbox Code Playgroud)
现在我们要使用
nasm汇编程序创建我们的目标文件,然后使用GNU链接器链接目标文件:
[slap@0day root] nasm -f elf exit_shellcode.asm
[slap@0day root] ld -o exit_shellcode exit_shellcode.o
Run Code Online (Sandbox Code Playgroud)
最后,我们准备好了解我们的操作码.在这个例子中,我们将使用
objdump.该objdump实用程序是一个简单的工具,以人类可读的形式显示目标文件的内容.它还在显示目标文件的内容时很好地打印出操作码,这使得它在设计shellcode时很有用.objdump像这样运行我们的程序:
[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
Run Code Online (Sandbox Code Playgroud)
从那以后,您可以非常清楚地看到nasm期望英特尔符号但objdump产生AT&T表示法.你只需要习惯他们之间的差异.
| 归档时间: |
|
| 查看次数: |
935 次 |
| 最近记录: |