有没有办法将函数作为参数传递给程序集?
我在想,像设置一个函数的堆栈指针,然后执行,直到它返回。有没有办法将函数作为参数传递给程序集?
编辑:我使用nasm和nlink。
Edit2:我使用x86处理器。
Edit3:好的,所以我想写一个过滤器函数,它会过滤一个字符串,使用另一个函数来决定一个char是否可以接受。我想它的形式如下:
;params: string in r1, function in r2
Filter:
;do stuff
ret
IsCharGood:
;decide if char is good
ret
main:
mov r1, theString
mov r2, IsCharGood
call Filter
编辑4:已解决,请参阅下面的答案。
好了,所以这是比较简单的:
aFunction:
;do stuff here
ret
callFunctionInEax:
call eax
ret
main:
mov eax, aFunction
call callFunctionInEax
ret
正常的调用约定是将堆栈上的args传递给32位,或将寄存器中的args传递给64位。但是,这是有效的。 –
装配中没有“功能”,这是更高层次的概念。
你不说你正在使用哪个处理器,但是如果处理器有指令跳转到常规寄存器中的地址,那当然是最简单的方法。例如ARM可以做到这一点,并so can x86。
当然,如何将参数传递给子例程取决于组装中的程序员。只要您可以生成呼叫,您就可以传入寄存器或堆栈中,无关紧要。攻击堆栈指针本身看起来很尴尬和奇怪。
谢谢你的回答!现在我只需要找到我的子程序的地址。也许我可以使用Ollydbg,我不确定。 –
@ zsolt-z大多数汇编程序都支持符号。所以用'lea r2,IsCharGood'替换'mov r2,IsCharGood',你在r2中得到了IsCharGood的地址。 – zx485
根据你的标题:是的,这是平凡的可能。请用一个例子来说明你想达到的目标以及你到达那里的问题。 –