摘要: 1、传参无论是用寄存器还是栈,最终都要压入栈中。 2、第一个参数的位置是ebp+8,少于4byte的数据类型按照4Byte压栈,第n个参数的地址是[ebp+4+4n],ebp+4是返回地址。 8byte的数据类型,会先开辟8字节的栈空间esp-8,再把数据放入栈中。下一个参数的地址相应的要加8。 3 阅读全文
posted @ 2024-05-14 22:57 Haris 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 通常win32下三种不同的调用模式,不同版本的编译器,对汇编出来的代码都会代理一些差别。__cdecl是默认的方式,采用外平栈。__stdcall,采用内平栈。__fastcall,因为采用2个寄存器传参,所以多于2个参数后也会用外平栈的方式。 传入的第一个参数位置在ebp+8,后面依次加4个字节, 阅读全文
posted @ 2024-05-13 23:37 Haris 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 今天研究执行流,代码运行到自定义的栈时bochs总是重启。把栈的地址定义到了第三个数据段0x18,在0x7e00处,分出64k(0x10000)空间。段描述符是这样的: Base4 G D/B L A + L2.5 P DLP S + T E W A Base3 Base2 Base1 L2 L1 阅读全文
posted @ 2024-05-09 18:39 Haris 阅读(2) 评论(0) 推荐(0) 编辑