第一章:windows PE 开发环境
MASM32 ml.exe汇编编译器 rc.exe资源编译器 link.exe
安装masm32到d:\masm32
增加环境变量用户变量
include=d:\masm32\include;
lib=d:\masm32\lib;
path=d:\masm32\bin;
修改文件字节码:
HEX数据 edit -> copy to excutable -> pop up a window then click edit -> binary edit (note: keep size) then -> save file...
修改文件字符串常量不能像上字节码那样,字符串数据修改时要用十六进制工具来修改,
内存地址 = 基地址 + 文件偏移量
//helloword.asm
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
.data
szText db 'Hello World',0
.code
start:
invoke MessageBox,NULL,offset szText,NULL,MB_OK
invoke ExitProcess,NULL
end start
c:\testmasm>ml /coff helloword.asm /link -subsystem:windows
PE(Portable Executeable File Format,可移植的执行体文件格式),使用该格式的目标是使链接生成的EXE文件能在不同的CPU工作指令下工作。
window os下执行程序:COM,PIF,SCR,EXE等,大部分继承自PE,.dll也是PE文件。
在PE格式中,每一个大的部分的对齐方式就是按照200h大小对齐的
第二章:三个小工具的编写
PEDump文件字节码查看器 PEComp文件比较器 PEInfo文件结构查看器
内存映射文件(Maped):是指将硬盘上的文件不做修改地装载到内存中。这样,文件中字节间是顺序排列的;
在硬盘上,文件被分割成若干簇,这个簇不一定会按照文件内容顺序排列在一起。大型软件设计上利用这点存取磁盘文件。
PE内存映像(IMAG): 是将PE文件按照一定的规则装载到内在中,装入后的整个文件头内容不会发生变化,但PE文件的某一部分如节的内容会按照
字段中的对齐方式在内存中对齐,从而使得内存中的PE映像与装载前的PE文件不同。
PE内存映像与一般的内存映射文件不一样,原因PE文件是OS装载进内存的,按一定的格式对齐,提高运行效率。所以PE内存映像和原来硬盘上文件是不同的。