-
-
[IDA使用技巧]#164: 我的代码呢?函数参数丢失的情况
-
发表于:
2023-12-6 17:31
8772
-
[IDA使用技巧]#164: 我的代码呢?函数参数丢失的情况
翻译:梦幻的彼岸
原文地址:dc8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Z5k6i4S2Q4x3X3c8J5j5i4W2K6i4K6u0W2j5$3!0E0i4K6u0r3j5X3I4G2k6#2)9J5c8X3W2Y4L8%4u0K6i4K6u0V1N6r3W2H3i4K6u0V1L8$3k6Q4x3X3c8@1K9r3g2Q4x3X3c8%4k6h3g2C8i4K6u0V1x3e0j5@1i4K6u0V1N6$3S2W2M7X3g2K6i4K6u0V1L8i4W2Q4x3X3c8U0L8$3c8W2i4K6u0V1N6r3S2W2i4K6u0V1j5$3q4K6k6g2)9J5k6r3!0X3i4K6u0V1L8h3W2K6M7$3W2F1k6#2)9J5k6r3k6#2L8X3y4@1K9h3!0F1i4K6u0V1j5i4u0Y4N6h3#2W2L8Y4c8K6i4K6u0r3
让我们来看看 x86 Windows 二进制文件的反编译片段:
使用相同的参数调用了相同的函数两次,最后一次似乎没有使用 GetComputerNameExW 调用的结果。
通过切换到反汇编,我们可以看到在每次调用之前都用字符串地址初始化了eax:
但是反编译器并不考虑它,因为在 x86 系统中,栈是传递参数的常用方式,而 eax 通常只是一个临时的寄存器。
一种方法是编辑 sub_10006FC7 的原型,使用 __usercall调用约定,然后手动将 eax 添加到参数中。但当函数位于同一个二进制文件中时,通常更简单的做法是直接进入函数内部并反编译,这样反编译器就能看到函数在初始化前确实使用了 eax,从而将其添加到参数列表中:
[注意]看雪招聘,专注安全领域的专业人才平台!
最后于 2023-12-6 17:35
被梦幻的彼岸编辑
,原因: