首页
社区
课程
招聘
[下载] AheadLib修改 支持x64支持类/命名空间
2018-1-31 17:26 35710

[下载] AheadLib修改 支持x64支持类/命名空间

2018-1-31 17:26
35710
收藏
点赞3
打赏
分享
打赏 + 20.00雪花
打赏次数 2 雪花 + 20.00
 
赞赏  浩天he   +10.00 2018/03/07
赞赏  hackbs   +10.00 2018/02/27
最新回复 (99)
雪    币: 205
活跃值: (2559)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 2 2018-2-28 10:26
51
0
这个主要是这么个用途,变量是必须直接转发的,否则中转dll的变量在一个地址,原始dll的变量在一个地址,运行期间肯定会出问题的。所以必须加上一个判断是否变量的函数。但是方法也许不是很好,现在的判断是要么这个地址不存在dll文件偏移,要么所在文件偏移具有执行权限。
然后其他直接转发的还有一些编译器直接生成的函数或变量,比如带有`和'符号的,虚函数表啥的
雪    币: 319
活跃值: (2299)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2018-3-4 09:17
52
0
yeyeshun 这个主要是这么个用途,变量是必须直接转发的,否则中转dll的变量在一个地址,原始dll的变量在一个地址,运行期间肯定会出问题的。所以必须加上一个判断是否变量的函数。但是方法也许不是很好,现在的判断是要 ...
将这个函数修改了一下,不知这样是否正确,请楼主指教:
BOOL WINAPI CAheadLib::IsFunction(const PIMAGE_NT_HEADERS pInh, DWORD dwRva)   //判断函数
{
INT i;
PIMAGE_SECTION_HEADER pIsh;

pIsh = (PIMAGE_SECTION_HEADER)((PBYTE)pInh + sizeof(IMAGE_NT_HEADERS));

if (pInh->OptionalHeader.FileAlignment == pInh->OptionalHeader.SectionAlignment)   //判断文件块对齐与节对齐是否相同
{

for (i = 0; i < pInh->FileHeader.NumberOfSections; i++, pIsh++)
{
if (dwRva >= (pIsh->VirtualAddress))
{
if (((pIsh)->VirtualAddress) + pIsh->Misc.VirtualSize > dwRva)
{
if ((pIsh->Characteristics & IMAGE_SCN_MEM_EXECUTE))
{
return dwRva;
}
else
{
return 0;
}
}
}
}
return 0;
}else{
for (i = 0; i < pInh->FileHeader.NumberOfSections; i++, pIsh++)
{
if (dwRva >= (pIsh->VirtualAddress))
{
if (((pIsh->VirtualAddress) + (pIsh->SizeOfRawData)) > dwRva)
{
if ((pIsh->Characteristics & IMAGE_SCN_MEM_EXECUTE))
{
return dwRva - pIsh->VirtualAddress + pIsh->PointerToRawData;
}
else
{
return 0;
}
}
}
}
return 0;
}
}
最后于 2018-3-4 10:49 被csjwaman编辑 ,原因:
雪    币: 28
活跃值: (79)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
eapple 2018-3-5 08:38
53
0
直接转发,
最后于 2018-3-5 08:50 被eapple编辑 ,原因:
上传的附件:
雪    币: 319
活跃值: (2299)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2018-3-5 10:04
54
0
我编译了一下,貌似没有问题呀
上传的附件:
雪    币: 28
活跃值: (79)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
eapple 2018-3-5 10:15
55
0
编译没有问题,直接转发, 是错误的,用这个文件调用的dll,你试试看
最后于 2018-3-5 10:15 被eapple编辑 ,原因:
上传的附件:
雪    币: 28
活跃值: (79)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
eapple 2018-3-5 10:26
56
0
csjwaman 我编译了一下,貌似没有问题呀
可能是IDE问题,用2017编译没问题,用VC6就不行。。
雪    币: 205
活跃值: (2559)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 2 2018-3-5 11:22
57
0
csjwaman yeyeshun 这个主要是这么个用途,变量是必须直接转发的,否则中转dll的变量在一个地址,原始dll的变量在一个地址,运行期间肯定会出问题的。所以必须加上 ...
加了这个判断之后是否对于加壳dll有效?基于什么原理?能不能把函数修改前后,分别对加壳dll生成的文件发来看一下,因为我对这方面的东西也不是特别清楚,如果对照生成结果的话,或许能更容易理解。
雪    币: 205
活跃值: (2559)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 2 2018-3-5 11:25
58
0
eapple 可能是IDE问题,用2017编译没问题,用VC6就不行。。
涉及到编译器版本我就无能为力了。不过vc6确实太老了,很多东西都不一样的了。似乎std库和MFC库的一些实现上都有很大的改变。
雪    币: 319
活跃值: (2299)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2018-3-5 15:16
59
0
yeyeshun 涉及到编译器版本我就无能为力了。不过vc6确实太老了,很多东西都不一样的了。似乎std库和MFC库的一些实现上都有很大的改变。
加了壳一般对齐粒度会相同,区段中物理地址和数据长度会被清零,但内存地址和内存数据长度一般不能清零。
最后于 2018-3-5 15:21 被csjwaman编辑 ,原因:
上传的附件:
雪    币: 319
活跃值: (2299)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2018-3-5 15:23
60
0
yeyeshun 加了这个判断之后是否对于加壳dll有效?基于什么原理?能不能把函数修改前后,分别对加壳dll生成的文件发来看一下,因为我对这方面的东西也不是特别清楚,如果对照生成结果的话,或许能更容易理解。
我就是用VC6编译的。
雪    币: 205
活跃值: (2559)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 2 2018-3-5 18:02
61
0
csjwaman yeyeshun 涉及到编译器版本我就无能为力了。不过vc6确实太老了,很多东西都不一样的了。似乎std库和MFC库的一些实现上都有很大的改变。 加了壳 ...
看到了,效果非常牛逼。那么会不会对其他正常的东西产生影响?比如一些变量什么的
雪    币: 319
活跃值: (2299)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2018-3-5 18:39
62
0
yeyeshun 看到了,效果非常牛逼。那么会不会对其他正常的东西产生影响?比如一些变量什么的
对函数功能不会产生影响。如果原函数本身不能处理变量,那么这个函数也无法处理。
雪    币: 319
活跃值: (2299)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2018-3-6 09:53
63
0
完善了一下:

       //if  (pInh->OptionalHeader.FileAlignment  ==  pInh->OptionalHeader.SectionAlignment)      //判断文件块对齐与节对齐是否相同
       if  (pIsh->PointerToRawData  ==  0||  (pIsh)->SizeOfRawData  ==  0)      //判断>PointerToRawData  和  SizeOfRawData  是否为0
这样可能兼容更多加了壳的DLL。
雪    币: 205
活跃值: (2559)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 2 2018-3-6 10:40
64
0
csjwaman 完善了一下: //if (pInh->OptionalHeader.FileAlignment == pInh->OptionalHeader.SectionAlignment) ...
好的,已经更新代码及exe文件,非常感谢!
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shichun 2018-3-7 10:39
65
0
感谢分享
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shichun 2018-3-7 11:22
66
0
错误        LNK2001        无法解析的外部符号  _prevFunc        请问编译时出现这个错误是什么问题
雪    币: 205
活跃值: (2559)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 2 2018-3-7 11:45
67
0
shichun 错误 LNK2001 无法解析的外部符号 _prevFunc 请问编译时出现这个错误是什么问题
是x64的是吗?需要把与cpp一起生成的一个obj文件添加到你的工程里一起编译
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
taizhong 2018-3-9 22:29
68
0
好像问题还挺多,,,
我这个小白就不下载了

雪    币: 52
活跃值: (2158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
实都 2018-3-12 15:17
69
0
赞一个,支持X64挺不错的
雪    币: 9
活跃值: (115)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
yber 2018-6-12 06:20
70
0
收藏
雪    币: 319
活跃值: (2299)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2018-6-13 21:29
71
0
yeyeshun 是x64的是吗?需要把与cpp一起生成的一个obj文件添加到你的工程里一起编译
x64编译时貌似多出一个类,无法正常编译。请楼主再看看!
上传的附件:
雪    币: 205
活跃值: (2559)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 2 2018-6-29 16:38
72
0
csjwaman x64编译时貌似多出一个类,无法正常编译。请楼主再看看!
不好意思,论坛的登陆机制有问题,显示登陆状态其实没有登陆,我是今天发现应该收到短消息的然而没提示于是点进去看,才发现一直是未登录状态。
这个我用代码暂时无法精确判断出来,手动加入一个空类的定义吧:
class QDir
{

};
雪    币: 319
活跃值: (2299)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2018-7-15 22:28
73
0
yeyeshun 不好意思,论坛的登陆机制有问题,显示登陆状态其实没有登陆,我是今天发现应该收到短消息的然而没提示于是点进去看,才发现一直是未登录状态。 这个我用代码暂时无法精确判断出来,手动加入一个空类的定义吧: ...
加了空类后,可以编译成功。但生成的DLL输出函数名中有一个与原DLL不一样。不知什么原因
原函数名为:?getLogDirectory@logging@ecg@@YA?AVQDir@@XZ
新生成的DLL函数为:?getLogDirectory@logging@ecg@@YA?AVQDir@12@XZ
最后于 2018-7-15 23:29 被csjwaman编辑 ,原因:
雪    币: 205
活跃值: (2559)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 2 2018-7-16 10:32
74
0
加你Q了,通过一下。
我的生成没这个问题,VS2013的
雪    币: 188
活跃值: (243)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
新天地 2018-10-28 00:22
75
0
好东西,一定要支持
游客
登录 | 注册 方可回帖
返回