首页
社区
课程
招聘
[求助]为什么向可执行文件添加section不一定能成功?
发表于: 2008-4-14 09:38 4456

[求助]为什么向可执行文件添加section不一定能成功?

2008-4-14 09:38
4456
为实验起见,我使用studpe为notepad加了一个区段,但这种做法使用notepad运行出错,我又试了一些其它的可执行文件,却可以成功.加section有什么限制吗?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 50161
活跃值: (20620)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
将notepad.exe的数据目录表中的boundimport清零即可,其在原区块后面,没地方让你新增section
2008-4-14 09:42
0
雪    币: 207
活跃值: (12)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
请问这个boundimport有什么用?
直接清零会不会有副作用。

我试了,这样也可以:
把整个boundimport目录往下移一点,
然后把pOptionHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].VirtualAddress加上移动的字节数。
这样做不是更好吗?
2008-4-14 09:57
0
雪    币: 50161
活跃值: (20620)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
直接清零没什么副作用的。
当Windows加载器装入PE文件时,会将相关DLL映射到内存,并将相应的地址填充到IAT里。为了加快程序加载速度,可以事先将正确的函数地址填充到IAT里。

此时BoundImport会假设:
1.当进程初始化时,需要的DLL实际上加载到了它们的首选基地址中。
2.自从绑定操作执行以来,DLL输出表中引用的符号位置一直没有改变。

如果上面的两个假设中有一个是假的,IAT中所有地址均是无效的,加载器会从INT表里获得所需要的信息重新填充IAT。BoundImport里就是存有这些DLL的相关信息。

也就是说,你将BoundImport结构清零,不会影响程序执行,程序只是每次运行直接填充IAT,而不使用IAT中己存在的函数地址。
2008-4-14 10:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
那么如果为dll加section 有没有限制呢?
2008-4-14 17:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我现在的最终目标是为kernel32.dll加一个区段 然后写代码
2008-4-14 17:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
没有什么其它建议吗?我在kernel32中加一个段失败了
2008-4-16 09:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我都晕了 不知为什么在kernel32.dll中加一个段
2008-4-22 09:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我都晕了 不知为什么在kernel32.dll中加一个段 将这个dll放到系统中 如果段不超过200字节 就没事 段超过200字节系统一定死 为什么呢?
2008-4-22 09:49
0
游客
登录 | 注册 方可回帖
返回
//