window 和 linux x64差别
原创作者:狂客
版权声明:转载 请标注来源
差别一 window 和 linux 调用CALL 使用寄存器传参不同
window
1 /** 2 注意现在使用函数库必须先调用 KuangKeInIt 这个函数 3 4 r8-r15 5 r8 保存 64位 6 r8d 保存 32位 7 汇编调用函数 没有默认值一说 8 调用CALL 9 注意: 10 调用call rsp必须减去0x20 或者 0x20以上的数字。且是8的倍数 减去 必须调用完加上 堆栈平衡 11 12 000000013F0B3385 mov dword ptr [rsp+38h],0Bh //参数八 13 000000013F0B338D mov dword ptr [rsp+30h],0Ah //参数七 14 000000013F0B3395 mov dword ptr [rsp+28h],9 //参数六 15 000000013F0B339D mov dword ptr [rsp+20h],7 //参数五 16 000000013F0B33A5 mov r9d,5 //参数四 17 000000013F0B33AB mov r8d,3 //参数三 18 000000013F0B33B1 lea rdx,[_load_config_used+70h (013F0BCCB0h)] //参数二 19 000000013F0B33B8 lea rcx,[_load_config_used+78h (013F0BCCB8h)] //参数一 20 000000013F0B33BF call qword ptr [__imp_printf (013F0C1300h)] 21 22 **/
linux
push 0x9 //参数八 push 0x8 //参数七 mov r9d,0x7 //参数六 mov r8d,0x6 //参数五 mov ecx,0x5 //参数四 mov edx,0x3 //参数三 mov esi,0x2 //参数二 mov edi,0x1 //参数一 注: 代码我没复制全 这里全是64位寄存器 之所以 mov edi, 0x1 前面有 xor rdi, rdi call 0x555555555185 //<liu(unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long)> add rsp,0x10 call 0x555555555030 //<pause@plt>