【发布时间】:2014-09-27 14:44:57
【问题描述】:
在一个shellcode教程中,我看到了下面的例子:
main(){
exit(0);
}
这个想法是创建一个 exit()-系统调用。 所以,然后他们生成程序集:
Section .text
global _start
_start:
mov ebx, 0
mov eax, 1
int 0x80
我明白这一点。 0 是我们存储在 ebx 中的 exit() 的参数,1 是退出系统调用的编号,使用 0x80 我们将 CPU 更改为内核模式并执行系统调用。
之后,他们让我们生成以下操作码:
bb 00 00 00 00
b8 01 00 00 00
cd 80
然后,他们将其翻译成 C 语言,如下所示:
char example[] = "\xbb\x00\x00\x00\x00"
"\xb8\x01\x00\x00\x00"
"\xcd\x80"
int main(){
int *pointer;
pointer = (int *)&pointer+2;
(*pointer) = (int)example;
}
所以,我的理解是他们将操作码放在一个 char 数组中,但我不明白他们在 main() 方法中做了什么。 第一行没问题。但是他们想用第 2 行和第 3 行来表达什么?
最好的问候,
【问题讨论】:
标签: c pointers assembly shellcode opcodes