在源码中指定PE节

在源码中指定PE

Win32ASM在定义段时指定节:

.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

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


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() {}

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

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

mysec被合并之后:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值