有没有办法将函数作为参数传递给程序集?

时间:2015-11-04 12:47:08

标签: assembly

我正在考虑将堆栈指针设置为函数,然后执行直到它返回。

编辑:我使用nasm和nlink。

Edit2:我使用x86处理器。

Edit3:好的,所以我想编写一个过滤函数,它会过滤一个字符串,使用另一个函数来决定char是否可以接受。我想象它的形式:

Direction

Edit4:已解决,请参阅下面的答案。

2 个答案:

答案 0 :(得分:2)

汇编中没有“函数”,这是一个更高层次的概念。

您没有说明您正在使用哪个处理器,但如果处理器有指令跳转到常规寄存器中的地址,那当然是最简单的方法。例如,ARM可以执行此操作,so can x86

当然,如何将参数传递给子例程取决于程序员的程序集。您可以传入寄存器或堆栈,只要您可以生成呼叫,这无关紧要。黑客攻击堆栈指针本身似乎很尴尬和奇怪。

答案 1 :(得分:1)

好的,所以它相对简单:

aFunction:
    ;do stuff here
    ret

callFunctionInEax:
    call    eax
    ret

main:
    mov     eax, aFunction
    call    callFunctionInEax
    ret