我想在pe的import表中添加新的dll,然而我只想加载该dll,并不需要引用其中的任何函数,请问IMAGE_IMPORT_DESCRIPTOR的OriginalFirstThunk参数该怎么设定?我将让它指向一个IMAGE_THUNK_DATA的RVA,并把该IMAGE_THUNK_DATA的u1.AddressOfData设置为IMAGE_ORDINAL_FLAG32,结果运行程序时出现0xc0000005失败,请问这是为什么?

解决方案 »

  1.   

    不明白你要干什么,不用函数,引用dll干什么?
    另外什么叫“u1.AddressOfData*设置为*IMAGE_ORDINAL_FLAG32”??IMAGE_ORDINAL_FLAG32只是相当于一个flag的东西(0x80000000),IMAGE_THUNK_DATA这个DWORD的msb,如果设置了,那剩下的31个bit就你要引用的function 的ordinal number,
    所以,你的设置的ordinal number是多少?你引用的这个dll有没有相应ordinal number 的函数?如果没有,在加载 exe的时候windows loader找不到你说的函数,当然要报错了~~
      

  2.   

    我在dll的加载函数(dllmain)中已经执行了需要的代码,所以不用引用任何其他函数,请问高手有没有办法实现?
      

  3.   

    http://www.pediy.com/tutorial/chap8/Chap8-1-1.htm
    http://www.xfocus.net/articles/200204/380.html
      

  4.   

    “我在dll的加载函数(dllmain)中已经执行了需要的代码,所以不用引用任何其他函数”
    那就是说引用的dll是你自己写的了?如果是这样,我有一个土办法:在dll里面再写一个什么也不干的函数,然后让你所引用的这个dll的INT 所指得的第一个IMAGE_THUNK_DATA 指向对应于这个函数的IMAGE_IMPORT_BY_NAME,当然这个IMAGE_IMPORT_BY_NAME结构也要你自己定义(考,tmd import table这块指针指指针,我说的已经不像人话了~~)关于pe结构,除了yintongshun(踏雪有痕)给的Iczelion教程外msdn上Matt Pietrek这几篇也不错:
    http://search.microsoft.com/search/results.aspx?View=msdn&st=a&qu=portable+executable&c=0&s=1
      

  5.   

    asm.yeah.net
    上面有这个功能我是实现了的,就是感染一下exe文件,大楷意思就是找点空间,
    把你要得dll的信息写入到正确的位置,然后,那个exe加载时候就加载了
    你的dll,你也可以修改哪个,开始运行的指针,指想你的dll函数的地址。