1、R 可查看、改变CUP寄存器的内容
2、D 查看内存中的内容
3、E 改写内存中的内容
4、U 将内存中的机器指令翻译成汇编语言
5、T 执行一条机器指令
6、A 命令以汇编指令的格式在内存中写入一条机器指令
速记:truead
mov
:将数据从一个位置复制到另一个位置。mov eax, 42 ; 将立即数42赋值给eax寄存器
mov ebx, eax ; 将eax寄存器中的值复制到ebx寄存器
lea
:用于计算一个有效地址,并将该地址存储在目标寄存器中。lea ecx, [ebx+4] ; 将ebx寄存器加上4得到的地址存储在ecx寄存器中
add
:执行加法操作。add eax, ebx ; 将eax寄存器的值加上ebx寄存器的值,并将结果存储在eax寄存器
sub
:执行减法操作。sub ecx, 10 ; 将ecx寄存器的值减去10,并将结果存储在ecx寄存器
ret
:用于从函数中返回。ret ; 从当前函数返回,将返回地址从堆栈弹出,并将程序控制转移到该地址
call
:用于调用函数或跳转到指定的地址。call my_function ; 调用名为my_function的函数
push
:将数据压入堆栈。push eax ; 将eax寄存器的值压入堆栈
pop
:从堆栈中弹出数据。pop ebx ; 从堆栈弹出一个值,并将其存储到ebx寄存器
asm
函数来编写和生成Shellcode。
printf
)时未正确处理用户输入,从而导致信息泄漏或任意内存读写。利用格式化字符串漏洞可以读取栈上的敏感信息、修改变量的值或执行任意内存写入。
确保安装了GNU工具链:打开终端并运行以下命令,以确保你安装了所需的工具链(汇编器和链接器):
sudo apt-get update
sudo apt-get install build-essential
编写汇编代码:使用任何文本编辑器创建一个新文件,并编写汇编代码。将文件保存为以.asm
为扩展名。
编译汇编代码:在终端中,使用以下命令将汇编代码编译为目标文件:
nasm -f elf64 -o program.o program.asm
上述命令中,-f elf64
表示生成64位可执行文件,如果你的代码是32位的,可以使用-f elf32
。
链接目标文件:使用以下命令将目标文件链接为可执行文件:
gcc -no-pie -o program program.o
-no-pie
选项用于禁用位置独立执行,以便与一些汇编代码兼容。
执行程序:现在,可执行文件已经生成。在终端中,进入可执行文件所在的目录,并执行它:
./program