- 主题:让dll/so内的函数访问dll/so文件尾部加的一个字符串
dll需要一个配置文件,不同客户配置不同,觉得两个文件比较麻烦。如果把两个文件简单合并,不知道有没有好办法让dll内的函数访问后面字符串的内容。
--
FROM 223.104.39.*
这样需要把dll/so文件读进内存来查找,不知道有没有访问权限问题。
【 在 z16166 的大作中提到: 】
: 弄个魔法数作为数据文件的文件头,从文件尾部往前搜这个头
: 或者最尾部放个固定长度的头,包含数据文件的尺寸和校验和
: 【 在 toutouqi (toutouqi) 的大作中提到: 】
: ...................
--
FROM 123.123.42.*
现在就是每次改配置文件重新编译dll,但是比较麻烦,得保留编译环境。因为代码不需要改动,现在可以做的是预留一个很大的常量字符串编译好,每次改dll文件替换预留的字符串,但dll太大。如果能把配置信息当字符串放在dll尾部,当配置文件不大时就可以让改过的dll不那么大,但问题是如何让加载器把dll尾部的字符当字符串自动加载进内存且让dll内的函数知道其地址。
【 在 slowaction 的大作中提到: 】
: 我没太理解这个需求
: 你要从so里面读配置
: 这你就需要根据不同的用户来生成不同的文件
: ...................
--
FROM 123.123.42.*
这个方法是可以用,就是得按配置文件的最大长度预留空间,导致dll很大。想知道有没有办法在配置文件很小时调整字符串大小,也不一定非得放在文件尾部。
【 在 hehao 的大作中提到: 】
: char cfg_data[2048]={'1','2','3','\0'... };
: 再二进制编辑器打开dll/so,查找到123字符串的位置,把自己的内容替换进去
:
--
FROM 123.123.42.*
2k很小,我意思是需要的配置文件可能几十k也可能超过十兆,如果预留空间就得按最大尺寸来预留空间。
【 在 hehao 的大作中提到: 】
: 2k 空间感觉大的话
: 你根据你的配置字符串大概尺寸,相应缩小不就得了,例如32,64;或者你还可以
: 把数据压缩一下
: ...................
--
FROM 123.123.42.*
多谢,权限问题主要是担心自己试没问题到客户机环境有问题,如果没有权限问题,那直接把配置附在文件尾部让程序读dll/so文件最省事儿了。
【 在 z16166 的大作中提到: 】
: so能load到进程里,那么这个进程就有权限读取这个so啊
: 另外,这种在ELF尾部额外追加的数据,OS应该不会map,所以/proc/pid/maps表里应该没这个数据,要不直接就已经在内存里了。
: 你先弄个小demo程序把这个流程try一下搞通,坐着论道,不如起来动手,顶多半小时的事情
: ...................
--
修改:toutouqi FROM 123.123.42.*
FROM 123.123.42.*