函数名很简单,导出表里写的明明白白,随便一个dll查看工具都可以读出,比如CFF explorer。但是对于参数,就像楼上说的那样,不能看出它真实的数据类型(即在高级语言中的抽象数据类型)。因为都编译成汇编了,没有抽象的概念了,此时只能知道数据大小。
但是,不代表就没有办法了。有个一软件叫IDA,专门用于静态分析,它可以反编译汇编成C的伪代码,从而大致能知道传入、传出了啥。如果再知道函数的功能的话,只要不是太复杂,分析出参数类型问题不大。
IDA反编译大概效果就是这样:void __fastcall Function(__int64 a1, __int64 a2, int a3, _QWORD a4)。这里只复制了个声明,但也可以看出,比晦涩的汇编容易读多了。注意上面写的数据类型只能当作参考,因为这些数据类型也是软件根据代码行为推测的。
argumentscallee 为指向自己的函数,可想相面这样实现递归的软编码,楼上说的ie不支持是ie不支持函数的name属性
function recursion() {aurumentscallee();
}
但是在 ES5 严格模式中这种方式不再被支持
用易语言写过
OriginalFirstThunk/FirstThunk
是指向一个IMAGE_THUNK_DATA数组的RVA
IMAGE_THUNK_DATA是一个有0结束的的DWORD数组,有多少个调用API就有多少个成员
每个成员是指向IMAGE_IMPORT_BY_NAME的RVA,检查这个RVA如果这个RVA的值与IMAGE_ORDINAL_FLAG32位与为1
则函数是通过序数引出的,所以不需要更进一步处理了。直接从提取这个RVA的低字节获得序数,然后是下一个IMAGE_THUNK_DATA
双字,如果不为1就是通过函数名称来引入的,IMAGE_IMPORT_BY_NAME有2个成员,
第一个是个序号,WORD,2字节
另一个就是函数名, 大小不固定,文本型 以0结束
通过我的讲解,你明白了吗
都是自己的函数吗?
那你给son加一个参数,传入是谁调用的不就行了
Function father()
son 0, 0, 0, "father"
End Function
Function mother()
son 0, 0, 0, "mother"
End Function
Function son(其他参数1, 其他参数2, 其他参数n, 谁调用的 As String)
Dim 谁 As String
If 谁调用的 = "father" Then 谁 = "爹"
If 谁调用的 = "mother" Then 谁 = "娘"
MsgBox 谁 & "叫我呐", , "做儿子的还能分不清爹娘嘛"
End Function
'测试代码
Private Sub Command1_Click()
father
End Sub
Private Sub Command2_Click()
mother
End Sub
以上就是关于如何查看DLL中的函数名及参数全部的内容,包括:如何查看DLL中的函数名及参数、javascript中,用什么方法能够在本函数内部获取到自己的函数名、如何利用OriginalFirstThunk获得引入表中函数名字等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)