首页
社区
课程
招聘
[求助]修改reloc段,加载dll出错-内存分配访问无效
发表于: 2009-1-15 21:31 6273

[求助]修改reloc段,加载dll出错-内存分配访问无效

2009-1-15 21:31
6273
请教大家一个问题,由于需要对dll打补丁,我修改了一个dll(com组件)的reloc段,然后用regsvr32注册时报错:
    LoadLibrary失败-内存分配访问无效
是什么原因导致的啊?
谢谢大家了

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
.reloc这个节中存放的是重定位表,dll不像exe,它的默认加载基址(通过连接器参数指定)在某个进程的地址空间中有可能无法使用,系统只能将它加载到另外一个地址,此时程序中全局变量以及函数指针等“地址”都需要进行修正,这个过程就是所谓的重定位(加载器重定位,另外还有一种连接器重定位,是另外一回事,与此无关),而重定位表中的表项就是记录了哪些数据是指针,指针类型以及需要修正的size等信息。

你破坏了重定位表,dll文件就无法正常加载了。

有关重定位的知识,自己参考一下相关文档,如微软的PE格式、ELF标准文档等。如果要深入学习,有一本书叫《连接器与加载器》,可以看一下。
2009-1-15 22:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢书呆彭,修改reloc表是必须修改我才修改的,因为我自己增加了指针,需要重定位,修改后将reloc表的size也根据我修改后的表大小改了,但结果出了这个问题,不知道怎么解决,PE格式我也看了,就是不知道出了什么问题!
2009-1-16 17:13
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
4
详细说一下,你都修改、增加、删除了哪些地方的哪些内容。

用OD跟一下修改后的dll,不要忽略内存异常,这样遇到异常时,顺着堆栈可以大约找到引发异常的代码,再分析一下是哪个指针出错了,为什么出错等。
2009-1-16 19:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
具体说下:
      我做的工作就是汉化一个动态链接库,在代码段的大量0处增加了宋体九号的logfont结构,然后作为createfontdirect函数的参数来设置界面上的字体,在原程序中都能正常运行,没有错误,且结果正确,但使用其进行二次开发后的程序就不能运行了,我分析了下,因为其原程序将这个dll加载到他的镜像地址上了,而二次开发程序没有加载到它的镜像地址,所以就考虑到修改reloc段,但修改完后所开发的程序也不能运行,注册也不行了,不知道是什么原因.
谢谢呆子彭
2009-1-16 19:29
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
6
只修改了.reloc节,没有修改重定位目录?
2009-1-16 19:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你指的重定位目录是不是重定位表中的item吗?
2009-1-16 19:35
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
8
OptionalHeader中的DataDirectory指向的Image_directory_entry_basereloc表。
2009-1-16 19:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
修改这个是不是指修改reloc表的地址和大小?
如果时,我修改了的
2009-1-16 19:43
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
10
那section table中的节大小也改了?
2009-1-16 19:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
section table是指?
2009-1-16 19:51
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
12
section table是OptionalHeader之后的一个结构,由ImageFileHeader中的相关域指出它的位置和大小。

要修改重定位表,重定位目录和.reloc节都需要看一下的。
2009-1-16 20:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
这两个地方我都修改了,你有qq吗,能和你在线聊吗?
2009-1-16 20:10
0
游客
登录 | 注册 方可回帖
返回
//