前言
本次是该系列的的第0x19篇,本篇介绍了一种函数传参的方式,这种方式对逆向会造成一定的干扰,数据代码写在一起了。
实验环境:
- Windows10 + VS2022 + masm
0x19
代码片段链接:xorpd | xchg rax,rax 0x19
call .skip
db 'hello world!',0
.skip:
call print_str
add rsp,8
代码分析
这里代码逻辑很简单清晰,数据和代码写在一起了,这样主要用于干扰逆向反汇编
同时,通过call skip这个指令,跳过了数据字符串的同时,还将其地址入栈
然后紧接着调用打印函数,这里打印函数是通过栈传递参数,则直接可以打印成功
这里直接调用库函数printf来代替打印函数,这里函数是rcx传参,所以这里需要做点修改:把rsp里保存的地址赋值给rcx,然后再调用
测试代码:
includelib ucrt.lib
includelib legacy_stdio_definitions.lib
printf proto
.code
main proc
call skip
db 'hello world!',0
skip:
mov rcx, qword ptr [rsp]
call printf
add rsp,8
ret
main ENDP
END