读过 罗云彬 的win32汇编的高手请进

c_leano 2009-04-17 12:51:00
在老罗的这本win32汇编的最后一章中讲到读取PE文件的导入库的时候,他写了一个例子来读取PE文件的导入库和函数等信息,但他在获取IMAGE_IMPORT_DESCRIPTOR 地址的时候取是这样做的
mov edi,_lpPeHead
assume edi:ptr IMAGE_NT_HEADERS
;********************************************************************
mov eax,[edi].OptionalHeader.DataDirectory[8].VirtualAddress
熟悉PE文件的都知道索引是1的DataDirectory的VirtualAddress指向的才是导入表的RVA,后来我以为是笔误,我把它改成1后编译,运行居然出错了,还非得是8才能正确运行,我把所有代码看了几遍都没看出什么问题,不知道有没有那位也曾经发现过这个问题并解决了,请不吝赐教!
...全文
117 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫郢剑侠 2009-04-19
  • 打赏
  • 举报
回复
MASM32中的[8]不像高级语言中的数组下标会根据数组元素不同而智能取值,它总是代表字节偏移
wxgiter 2009-04-17
  • 打赏
  • 举报
回复
帮顶~~

我才看到第5章。。。。。
lmxd70 2009-04-17
  • 打赏
  • 举报
回复
这是masm的一个语法规定,这里的DataDirectory[8]并不是指DataDirectory里的索引8,而是指结构所占的字节数。DataDirectory中每个IMAGE_DATA_DIRECTORY 占2个DWORD,也就是8个字节,所以导入表就是在DataDirectory结构+8字节的地方

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧