这个函数接受传入的整型参数(您还记得,第一个参数是在RDI 中传入的),将其存储到RDX 寄存器中,并将该参数压入堆栈。然后将RDX 设置为0x0,然后将从堆栈中pop 的值存储回RDX 寄apt install ropper //安装ropper ropper --file ret2win_params --search "pop rdi" //从内存中弹出值到rdi寄存器中这个地址是执行pop rdi操作的0x00000000
被调者保存的寄存器;或用作帧指针要%rsi 用来给函数传递第2 个参数不要%rdi 用来给函数传递第1 个参数不要%r8 用来给函数传递第5 个参数不要%r9 用参数xp中存放的是数值4 的内存地址,该地址存放在寄存器%rdi 中。参数y中的数值是3,该值保存在寄存器%rsi 里。exchange 函数的初始状态*注:图中Memory
那么x64系统下参数是存放在寄存器上,第一个参数地址放在rdi寄存器里。这样要执行system(‘bin/sh’我们就需要找'/bin/sh'字符串的地址,然后把该地址放到rdirsi, rcx),并且实际上为什么选择RDI和RSI作为x86-64 System V ABI中的前2个arg传递寄存器:一些函数打电话memset或memcpy使用他们的前1或2个args,因此rep movsb/d在这种情况下
1、rax作为函数返回值使用2、rsp指向栈顶3、rdi、rsi、rdx、rcx、r8、r9、r10等寄存器用于存放函数参数三、64位AT&T汇编- 寄存器四、ARM汇编- 寄存器五、AT&T汇编v新名称rXX 64 位寄存器清楚地表明,旧的寄存器名称只是为了熟悉和兼容。但请注意,某些指令仍然仅适用于某些寄存器,例如rep movsb 在x86-64 System V ABI 中仅用作memcpy(r
Intel 64、rsi和rdi寄存器在Intel64体系结构中,有RAX.RDX寄存器,它们是简单的A.D通用寄存器。但是也有称为rsi和rdi的寄存器,它们是“源索引”和“目标索引”寄存器。为什么通用寄存器在我们的程序运行中所做的事可以简单地总结为每个函数(方法)执行时暂时存放参数和返回值。每个参数对应的寄存器的关系为:第一个参数:RDI 第二个参