【问题标题】:Windows xp 32bits d3d9.dll vs Windows 7 64bits d3d9.dllWindows xp 32 位 d3d9.dll 与 Windows 7 64 位 d3d9.dll
【发布时间】:2012-07-17 11:48:12
【问题描述】:

我有问题要为我的 hack 做代码洞穴。

windows xp 32bits d3d9.dll 运行时返回地址

4fe50000 (base address)
4fe58840 (drawindexedprimitive virtual table address)
4fe571b0 (endscene virtual table address)

windows 7 64bits d3d9.dll 运行时返回地址

72c30000 (base address)
72c5b6b1 (drawindexedprimitive virtual table address)
72c5279f (endscene virtual table address)

如果你仔细看,大小似乎不同。

好吧,我什至尝试调试这个 => "windows 7 x64's c:\windows\syswow64\d3d9.dll",它返回不同的地址 5e1cxxxx

我不确定我错过了什么。但返回为“72c30000”,我可以保证它是 32 位 d3d9.dll

有什么解释吗?

【问题讨论】:

  • 主要问题可能是为什么要检查函数地址?它们可能会有所不同,因为地址是虚拟的,因为地址空间随机化以及...因为服务包,修复或其他任何东西。这就是为什么我们有 GetProcAddress()...

标签: c++ debugging direct3d


【解决方案1】:

如今,DirectX 已成为 Windows 不可或缺的一部分。特别是 Aero 依赖于它,d3d9.dll 是预先安装的。所以简单的解释是地址不同是因为DLL不同。通过查看 Windows 资源管理器中的“属性”+“详细信息”选项卡,您可以轻松看到一些内容。注意不同的文件版本。

没有任何情况可以让您在不同的 Windows 版本中使用一致的函数地址。或者在一个版本上,安全补丁或服务包将改变地址。或者就某个特定文件版本而言,地址空间布局随机化功能专门用于阻止您尝试执行的操作。

【讨论】:

  • 当我打开 ida pro 来反转 windows 7 d3d9.dll 并与 windows xp d3d9.dll 进行比较时,说明是不一样的......所以如果我为 windows xp 做 codecave,我在 Windows 7 上运行可能会遇到问题,对吗?
  • 代码洞成功了,确实地址和windows xp不一样
猜你喜欢
  • 2014-06-01
  • 2012-01-26
  • 2011-03-27
  • 2013-06-11
  • 1970-01-01
  • 2013-09-19
  • 2013-06-06
  • 2016-03-26
相关资源
最近更新 更多