注册 登录
编程论坛 Windows论坛

一件令人匪夷所思的事。

tigerdown 发布于 2022-11-07 16:44, 11337 次点击
这是有关windows里的user32. dll和kernel.dll基址的问题。先以 user32. dll为例( kernel..dll也发生同样的情况)在 WinXP里一切正常,可以看出在 od里和在 PEinfo程序里所显示的基址是相同的。
只有本站会员才能查看附件,请 登录

但在 Win8里od和 PEinfo所显示的基址不一样,这是为什么?
只有本站会员才能查看附件,请 登录

 PEinfo程序所显示的基址是根据 API定义得出的,od也应该用了同样 API定义,但为什么会得出不同的基址?真是令人匪夷所思!
Windows 8.1
File nameC:\WINDOWS\System32\user32.dll
API: IMAGE_NT_HEADERS.OptionalHeader.ImageBase
IMAGE_NT_HEADERS   - ImageBase      0x6BA80000

IMAGE_NT_HEADERS32 - ImageBase      0x6BA80000
12 回复
#2
吹水佬2022-11-07 17:36
ImageBase是在扩展头,有32位和64位之分,看看文件是哪一位
#3
吹水佬2022-11-07 18:24
匪夷所思的事还有,在win10查看,查看工具是32位应用程序,打开windows\system32\的文件看是32位,但复制到其他文件夹看是64位???
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
#4
tigerdown2022-11-07 19:37
Od和PEinfo都是32位程序,文件user32. Dll显然是32位,这要看 API如可定义。关键是 od的基址是从那来的?

Windows 8.1

File nameC:\WINDOWS\System32\user32.dll

API: IMAGE_NT_HEADERS.OptionalHeader.ImageBase


IMAGE_NT_HEADERS   - ImageBase      0x6BA80000

IMAGE_NT_HEADERS32 - ImageBase      0x6BA80000

IMAGE_NT_HEADERS64 - ImageBase      0x0008A000




[此贴子已经被作者于2022-11-7 19:47编辑过]

#5
tigerdown2022-11-07 20:17
在 x32dbg和 x64dbg里查看了 user32. dll的基址,这些基址是怎样得到的?它们是真实的地址吗?
只有本站会员才能查看附件,请 登录
#6
吹水佬2022-11-07 20:18
回复 4楼 tigerdown
还要看Od和PEinfo是否支持64位PE文件
如果用32位有头结构去取64位的头数据就不对
#7
TsXor2022-11-07 20:42
以下是引用吹水佬在2022-11-7 18:24:17的发言:

匪夷所思的事还有,在win10查看,查看工具是32位应用程序,打开windows\system32\的文件看是32位,但复制到其他文件夹看是64位???


我记着在64位Windows中运行32位程序,system32会被重定向到sysWoW64
在64位Windows中,system32装64位库,sysWoW64装32位库
#8
tigerdown2022-11-07 20:51
那么你是不是认为只有在上面的 x64dbg里的基址是正确的,如果是这样的,所有的程序只要用到 user32. Dll就会跳转到这个基址。这必须要验证一下。
#9
吹水佬2022-11-07 22:50
以下是引用TsXor在2022-11-7 20:42:13的发言:



我记着在64位Windows中运行32位程序,system32会被重定向到sysWoW64
在64位Windows中,system32装64位库,sysWoW64装32位库

可能是这个问题,用个64位程序去看看查证一下。
#10
吹水佬2022-11-07 23:08
回复 8楼 tigerdown
PEinfo是随书源码的吗,是的话应该不支持64位PE,显示的结果就不对。
那书好象也没提到64位PE的各种数据结构。
#11
tigerdown2022-11-08 15:42
是32和64位的问题,od和x32 dbg都是32位的程序,所以我们是不是可以说,在64位环境下运行它们所得到的基址都是错误的,另外 PEinfo跟它们一样是32位程序,为什么得到的基址却不一样,最后一个非常现实的问题,在 win8. 1或win10中打开 notepad用的是那个 user32. dll 基址?!
#12
吹水佬2022-11-08 19:54
windows10菜单打开的是 C:\Windows\System32\notepad.exe
#13
liubo82023-01-20 13:50
可否问一下您使用的是什么软件进行调试的,谢谢!
1