在源码中指定PE节

在源码中指定PE

Win32 ASM 在定义段时指定节:

.386
.model stdcall, flat
option casemap:none

include windows.inc
include kernel32.inc
include user32.inc

includelib kernel32.lib
includelib user32.lib

sfdata segment		;指定节名为 'sfdata'
string	db	'hello world!', 0
sfdata ends 

sfcode	segment		;指定节名为 'sfcode'
start:
	mov eax, offset string
	invoke MessageBox, 0, eax, eax, MB_OK
	ret
sfcode ends

end	start

编译之后,用工具查看生成的节:

在源码中指定PE节_第1张图片

CPP中指定节:

//指定节为"mysec",属性为可读可写
//在"..\Microsoft Visual Studio 9.0\VC\crt\src\sect_attribs.h"中,
//出现含有'$'的节名,如".CRT$XIZ", 
//其中.CRT是真正节名, XIZ只是用于obj文件
#pragma section("mysec",read,write)		


//把buf存放在"mysec"节中
__declspec(allocate("mysec"))
char buf[] = "hello world!";

//如果未引用节中的数据,PE中可能不生成相应的节,数据可以在main中引用
int main() {}
在源码中指定PE节_第2张图片

可以用下面指令将两个节合并,合并之后,取后者节名:

#pragma comment(linker"/merge:mysec=.data") //合并后,使用.data做节名

mysec 被合并之后:

在源码中指定PE节_第3张图片


你可能感兴趣的:(Microsoft,user,工具,linker)