selph
selph
Published on 2022-03-21 / 288 Visits
0
0

《xchg rax,rax》片段分析0x19--一种函数传参方法

前言

本次是该系列的的第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

Comment