Assembly 初学者-Rop链-选择的小工具

Assembly 初学者-Rop链-选择的小工具,assembly,x86,x86-64,exploit,Assembly,X86,X86 64,Exploit,我正在尝试执行Rop链,该链将我的id写入堆栈中的指定地址(0xdeadbeef0000)。 我得到了一个编译过的文件,然后我得到了一个包含该文件所有小工具的输出文件。 我不确定我从小工具中选择的装配线的逻辑。 目标是显示堆栈的内存映像。 内存映像: 0xffffffffffffe5e0 : 0x00000000000011da // pop rbx ; ret 0xffffffffffffe5e8 : 0xffffffffffffe610 0xffffffffffffe5f0 : 0x0000

我正在尝试执行Rop链,该链将我的id写入堆栈中的指定地址(0xdeadbeef0000)。 我得到了一个编译过的文件,然后我得到了一个包含该文件所有小工具的输出文件。 我不确定我从小工具中选择的装配线的逻辑。 目标是显示堆栈的内存映像。 内存映像:

0xffffffffffffe5e0 : 0x00000000000011da // pop rbx ; ret
0xffffffffffffe5e8 : 0xffffffffffffe610
0xffffffffffffe5f0 : 0x00000000000011d1 // mov qword ptr [rbx], rax ; ret
0xffffffffffffe5f8 : 0x0000000000001193 // pop rbp ; ret
0xffffffffffffe600 : 0xdeadbeef0028
0xffffffffffffe608 : 0x0000000000001226 // mov eax, dword ptr [rbp - 0x28] ; add rsp, 0x38 ; pop rbx ; pop rbp ; ret
0xffffffffffffe610 : 0x12111111 // id
*rsp在开始处指向0xFFFFFFFFFF5E0

我想知道这样做是否可行?或者如果逻辑有问题。
谢谢大家!

您还没有解释您的符号,或者堆栈和代码应该在内存中的什么位置。将代码放在非常低的地址(如
0x0000000000001193
)听起来像是对饼图可执行文件的反汇编,而不是重新定位到实际加载的地址。而
0xffffffffff5e0
位于最高的虚拟页中,位于地址空间的高半部,因此在正常系统中,它是一个内核地址。这是利用内核代码,在用户空间中使用小工具吗?大多数系统都支持保护,以阻止监管者模式在不只是监管者的页面中执行代码,从而准确地阻止这种情况。此外,
mov eax,dword ptr[rbp-0x28]
是一种加载,而不是存储。如果我从您的注释中了解到,
0xdeadbeef0028
将在此时弹出到RBP中,那么它将从
0xdeadbeef0000
加载一个dword,因此您确实有正确的地址。