IDA技巧(108)伪代码中的原始内存访问

admin 2025年2月8日12:37:00评论13 views字数 702阅读2分20秒阅读模式

有时候在伪代码中,你可能会遇到看起来很奇怪的代码:

IDA技巧(108)伪代码中的原始内存访问

代码似乎在解引用一个名为MEMORY的数组,并且用红色高亮显示。然而,这个变量在任何地方都没有定义。它是什么呢?

这种表示法是反编译器在代码访问数据库中不存在的内存地址时使用的。在大多数情况下,这表明原始源代码中存在错误。如果我们查看上面的反汇编,会看到这样的内容:

IDA技巧(108)伪代码中的原始内存访问

变量pfont被加载到寄存器edx中,然后使用测试 edx, edx/jz序列与零进行比较。只有当edx为零时,才会跳转到loc_4060D3,这意味着mov eax, [edx+10h]指令将尝试解引用地址0x10。由于数据库不包含地址0x10,它不能被表示为正常或虚拟变量,因此反编译器将其表示为伪变量MEMORY,并使用地址作为索引。解引用用红色显示,以引起对代码中潜在错误的注意。例如,从汇编判断,在这个二进制文件中,程序员试图读取一个结构指针,即使它是空的。更现代的编译器可能甚至会删除这样的代码,因为解引用空指针是未定义行为。

在这种访问不是错误的情况下(例如,代码直接访问内存映射硬件寄存器),为访问的地址范围创建一个新段通常是正确的方法。

学习资源

立即关注【二进制磨剑】公众号

👉👉👉【IDA 技巧合集】👈👈👈
👉👉👉【Github 安全项目合集】👈👈👈
零基础学习 IDA 逆向
【课程完结!内容揭秘!】7 天打造 IDA 9.0 大师:从零基础到逆向精英
🔥🔥🔥 第二期 Android 内核逆向🔥🔥🔥🔥
【课程完结!内容揭秘】第 2 期-Android 逆向内核攻防
🔥🔥🔥 第三期 程序混淆十讲🔥🔥🔥🔥
【课程】第 3 期-程序混淆十讲【早鸟报名开启】

原文始发于微信公众号(二进制磨剑):IDA技巧(108)伪代码中的原始内存访问

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月8日12:37:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   IDA技巧(108)伪代码中的原始内存访问http://cn-sec.com/archives/3714296.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息