| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1126 人关注过本帖
标题:罗云彬win32第chapter17\在PE文件上附加可执行代码的例子看不懂的几句代码
只看楼主 加入收藏
hb0zyj
该用户已被删除
收藏
已结贴  问题点数:20 回复次数:4 
罗云彬win32第chapter17\在PE文件上附加可执行代码的例子看不懂的几句代码
提示: 作者被禁止或删除 内容自动屏蔽
搜索更多相关主题的帖子: 罗云彬 例子 文件 代码 
2010-04-27 09:34
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:20 
看了LZ的问题,偶都不敢回答啊,一来偶不是大侠,二来对于PE我可不懂啊.但我喜欢学习,就和LZ交流一下吧.
1.LZ的代码好像与书上略有出入,应该是这样?
mov    esi,_lpPeHead
assume    esi:ptr IMAGE_NT_HEADERS,edi:ptr IMAGE_NT_HEADERS
invoke    GlobalAlloc,GPTR,[esi].OptionalHeader.SizeOfHeaders
mov    @lpMemory,eax
mov    edi,eax
invoke    RtlMoveMemory,edi,_lpFile,[esi].OptionalHeader.SizeOfHeaders
add    edi,esi
sub    edi,_lpFile

2.edi=eax(@lpmemory)+esi-_lpfile这公式我觉得正确,是这么理解的.
这里的eax(@lpmemory)是指向新PE文件头在内存中的地址,而esi则指向原PE文件的NT头(或称PE头),_lpfile则是原PE文件在其内存中的首址.
现在,新的PE文件是从原PE文件复制过来的(用RtlMoveMemory),再经过一加一减,实质上是,eax(@lpmemory)+(esi-_lpfile)得到了新的edi,此括号中原NT头减去原文件首址,得到的是DOS部分的长度!而edi本来是新文件的首址,现在加上了DOS部分,新的edi正好指向了新的文件的NT头!

我是这么理解的,也许不正确啊.


[ 本帖最后由 ONEPROBLEM 于 2010-4-28 00:44 编辑 ]
2010-04-28 00:01
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
上面的红色括号中,改成这样更好理解:
edi=eax(@lpmemory)+(esi-_lpfile)
这样,最后edi是指向是新文件的NT头了.
2010-04-28 00:10
hb0zyj
该用户已被删除
收藏
得分:0 
谢谢回答,又有困惑
提示: 作者被禁止或删除 内容自动屏蔽
2010-04-28 09:10
hb0zyj
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-04-28 09:18
快速回复:罗云彬win32第chapter17\在PE文件上附加可执行代码的例子看不懂的几句 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015755 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved