-
Notifications
You must be signed in to change notification settings - Fork 59
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
loader和obj中同时引入同一个package,如果package里有结构,并在loader中碰了,就完 #43
Comments
@yedemon , 可以打进一个包,具体你可以看go自己的编译过程,但是你依旧要制定所有的包的path,否则会查不到符号。 btw, 没必要这么干,如果你依赖了很多包,那这些包应该在loader里,而不是依赖在外边,就如你现在这个问题,你应该直接把basecontext编译进loader里. 保证你需要.o中要调用的函数在loader里都存在,那么在加载的时候不需要加载它 |
!大神手速真快,我再试试新版··· 嗯我也是在想把可以和loader放在一起的包都打进loader里,这样 .o 就可以直接用 loader 带的东西,但是我第一次尝试 basecontext 的时候,似乎读不到。我更新下再试试。 |
你的.o中使用的符号,需要在loader中被使用,这样loader在编译的过程中这个符号才存在 |
嗯,这个已经确认了,可以。但是好像需要把basecontext 里面所有的公开的方法都在 loader里面显式的引用一次。 现在唯一的一个问题就是,怎么做比较好? |
这个不成,你只能调用goloader.regTypes来注册,这样函数就被保留了,如果你需要保留大量的函数,建议写个脚本生成下 |
奥·· 原来你这个 RegTypes 是干这个用的,多谢了。我再理一理~ |
求助, go 能否实现动态传递函数类型? 当我们从 库的符号里面 导出指针以后,能否动态转换成我们需要的函数?便于我们从参数里传入类型? 比如这样 或者有什么好的建议么? 感谢哈·· |
不了解你想干啥?函数的类型是确定的,不能随便修改,你调用的函数的函数签名是固定的,这是你在编写函数的时候就已经确定的了。 如果你想类似dl干活的话,参考dl就可以了。 |
嗯,这个我确实没想好哈·· 之前java 的思路用惯了,我本来想实现在同一个函数里实现给不同的地方的钩子添加回调函数,所以想把函数类型和回调列表作为参数传进来。在函数里面实现hook。类似
后来我发现可以把那个 unsafe.Pointer 返回去,在需要Hook的地方直接转成那边的函数类型就可以了。 还是感谢大大回复:) |
是的,调用者肯定明确知道需要调用的函数的签名 |
By the way, the JIT compiler in #66 adds in functionality to introspect the types of functions automatically, and build an This is closer to the go compiler generating a See |
pkujhd 好:)
和这个主题里面的例子一样,
https://github.com/pkujhd/goloader/issues/34#issue-926287173
不过我们在 global 前面添加一个结构
在 init 函数里面添加一个初始化
使用相同的编译过程
执行后输出如下
如果注释掉
这段代码,就没有问题。
我这里的 运行环境是
go环境是
麻烦帮忙看看这个问题是怎么回事。或者说正确的该是怎么个用法。
另外想再请教一个问题,如果 .o 里面的依赖包比较多,有什么办法可以把所有依赖都打进一个 .a 里嘛?我本来是想在 loader 程序里面引用这些依赖,然后直接用这些依赖来充数,结果调着调着还发现这么个问题,我感觉需要大大出手帮忙了。
The text was updated successfully, but these errors were encountered: