-
-
[IDA使用技巧]#162: 我的代码呢?不返回调用的情况
-
发表于:
2023-12-11 13:48
7753
-
[IDA使用技巧]#162: 我的代码呢?不返回调用的情况
翻译:梦幻的彼岸
原文地址:b33K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Z5k6i4S2Q4x3X3c8J5j5i4W2K6i4K6u0W2j5$3!0E0i4K6u0r3j5X3I4G2k6#2)9J5c8X3W2Y4L8%4u0K6i4K6u0V1N6r3W2H3i4K6u0V1L8$3k6Q4x3X3c8@1K9r3g2Q4x3X3c8%4k6h3g2C8i4K6u0V1x3e0j5J5i4K6u0V1N6$3S2W2M7X3g2K6i4K6u0V1L8i4W2Q4x3X3c8U0L8$3c8W2i4K6u0V1N6r3S2W2i4K6u0V1j5$3q4K6k6g2)9J5k6r3!0X3i4K6u0V1L8X3!0Q4x3X3c8J5k6i4c8#2M7X3&6Q4x3X3c8U0j5h3I4D9i4K6u0r3
比方说,你在二进制代码中发现了一个看起来很有希望的字符串,按照交叉引用找到了使用该字符串的函数,然后反编译了一下,想看看该字符串是如何使用的,结果却在伪代码中看不到任何迹象。这是怎么回事?
在这种情况下,设置两个同步的反汇编<->伪代码视图并滚动浏览它们以查找异常之处往往会有所帮助。通常,大多数伪代码行应该映射到一条或多条汇编指令,而大多数汇编指令(可跳过的指令除外,如函数的前导码和尾随码)应映射到伪代码中的某些行。
这里有一个奇怪的例子:伪代码中的单个函数调用不仅映射到调用指令,还映射到其后一系列看似无关的指令:
随后是在伪代码中没有任何映射的指令:
将鼠标悬停在调用上可以提供线索:它被标记为__noreturn(不返回)。
因为在它后面显然还有一些有效代码,所以似乎是误报。从原型中移除 __noreturn 属性(提示:Y快捷键)后,丢失的代码又回来了,指令映射也更规范了:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课