能力值:
( LV2,RANK:10 )
|
-
-
2 楼
汇编我知道用push eip保存函数地址,参数本身就在栈上
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
rongge
汇编我知道用push eip保存函数地址,参数本身就在栈上
可以用汇编,但eip已经不是函数入口地址了吧?已经执行过一些了。 参数本身是在栈上,但要知道长度哦。除非知道函数返回时ret的值?
|
能力值:
( LV7,RANK:140 )
|
-
-
4 楼
既然你需要用到宏,那么我认为你需要的是一种通用的,对于很多函数都要生效的一种方式。而且这些函数,可能参数是不固定数量,甚至不固定类型的。那么你的新线程如何知道参数的数量与各自的类型? 如果这些函数是已经写好了,确定下来的,那么我也没有很好的方法去封装,也许可以加一个__declspec(dllexport)导出,然后运行时根据还原出来的接口来确定参数的数量与类型。 如果是还没写的,我会这样实现: int func(char* szType, xxx,xxx,xxx); 由szType的长度来确定后面参数的数量,然后szType的内容,每个字节确定一个类型,比如szType = "ncs"的话,表示三个参数,依次是整数、字符、字符串指针。大概类似于这样吧。然后在传入新线程时,只需要把当前EIP作为新线程的参数传递过去,自己解析一下就可以了。 刚看到你还要获取当前函数的指针。。。这个不太会,如果函数作为naked,那么可以在入口处获取eip。如果不是naked,那么可以写一个宏,替换原有的函数定义,宏的内容包含了函数定义以及通过函数名获取函数指针。
最后于 2018-5-29 10:47
被yeyeshun编辑
,原因:
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
yeyeshun
既然你需要用到宏,那么我认为你需要的是一种通用的,对于很多函数都要生效的一种方式。而且这些函数,可能参数是不固定数量,甚至不固定类型的。那么你的新线程如何知道参数的数量与各自的类型?如果这些函数是已经 ...
如果拿到了参数后,调用可以不关心参数类型和个数,用push+call就行了。或者memcpy到esp之类的方法。 确实是希望通用的,放到哪都不用填写参数最爽了。 调用处有办法,现在是保存参数处无法实现。
|
|
|