-
2022-09-22 22:40 作者:スレーブ_スレイヤー | 我要投稿
虽然我不想说“我是傻X”,但是这事真的太蠢了。
我想在C#里获取某个进程的DLL的基址,于是直接谷歌搜索:

一眼看过去全都是意义不明的结果,于是开始自己折腾。
最终的代码长这个样子:
但是Module32FirstW一直返回False,我一直认为是那个结构体的问题,学了一堆乱七八糟的东西,加上之后都没用,把能做的尝试几乎都试了一遍,一天过去了,最后还是TMD没用。明明换成C++随便调用,到了C#就难受起来了......
我甚至试着比较C#和C++的调用,在汇编层面有什么不同,结果依旧没得到什么有价值的信息。
最后我放弃了,在StackOverflow用蹩脚的英文发了个帖,半个小时以后,我的世界观崩塌了:

没人正面解释我的问题,但是有个老哥问我,为什么不直接用:Process.GetProcessById(someId).MainModule.BaseAddress
啊?嗯?哈?え?What the......还能直接这样的吗?搞了半天,我整了一整天没解决的问题,原来只要一行代码?真就一行?我,我是谁,我在哪,我到底在干什么?
然后回头又重新谷歌搜索了一遍同样的问题,发现只要我往下划一下,下一个帖子里面就是用原生C#解决这个问题的方法。但是我一般只看前几个结果,所以忽略了。
冷静下来以后想了想,这一顿折腾也并不是没有价值。因为这个问题我在未来一定会遇到,C#应该不至于提供了全套的Winapi封装,到时候我还是要调用一些函数,然后要传结构体,然后搞不懂为什么我所有类型都对上了,还是TMD调用失败......