1625-5 王子昂 总结《2017年12月31日》 【连续第457天总结】
A. x64程序和逆向
B.
64位系统
CPU
32位时代,Intel主导着技术主流(x86),AMD则生成x86的兼容芯片
而到了64位时代,Intel最初发布的芯片IA-64是与HP合作的,它的指令集、寄存器都与x86完全不同。因此无法与x86直接兼容,只能通过模拟器来间接兼容(但速度慢)
后来AMD发布了AMD64,支持兼容IA-32,于是大受欢迎。
Intel没办法,只能向AMD购买了许可,发布了兼容AMD64的EM64T(后来改名为Intel64)。通常说的x64就是Intel64和AMD64的合称。
家用电脑和服务器常用x64,而大型服务器和超级计算器中则使用IA-64。
OS
64位操作系统兼容32位,原理是微软提供的WOW64(Windows On Windows 64)机制
数据模型
LLP64数据模型中,为了兼容32位使用的ILP32数据模型,仅将指针Pointer改为了8字节,即64位。其余short\int\long\longlong的大小都没有变动
Win32API
在64位Windows中,现有的Win32API几乎可以照搬使用,这使得开发人员不用熟悉新增的API,非常方便。
WOW64
64位Windows中,64位应用程序会加载kernel32.dll(64位), ntdll.dll(64位);
而32位应用程序则会加载WOW64中的kernel32.dll(32位), ntdll.dll(32位)
WOW64会将程序的请求(API调用)重定向到64位的kernel32.dll和ntdll.dll上
文件夹结构
在Windows64位中,分为System32文件夹和SysWOW64文件夹
System32是64位专用的
SysWOW64则是32位专用的
但当调用GetSystemDirectory()API取得系统文件夹时,64位会正常返回System32文件夹,而32位则会返回一个名为System32,内容为SysWOW64的值
这是因为WOW64在中间截获了API调用,并重定向至SysWOW64
注册表
32位进程请求访问HKLM\SOFTWARE下的键时,WOW64会将其重定向到HKLM\SOFTWARE\Wow6432Node下的键
但注册表无法完全分离为32位和64位两部分,因此有时会出现共用的情况
因此当进行逆向时需要自行查看API的具体说明
C. 明日计划
看书