Assembly 有没有一种方法可以将函数作为参数传递到程序集中?

Assembly 有没有一种方法可以将函数作为参数传递到程序集中?,assembly,Assembly,我想的是将堆栈指针设置为函数,然后执行直到返回 编辑:我使用nasm和nlink Edit2:我使用x86处理器 Edit3:好的,我想写一个过滤函数,它会过滤一个字符串,使用另一个函数来决定一个字符是否可以接受。我想象它的形式是: ;params: string in r1, function in r2 Filter: ;do stuff ret IsCharGood: ;decide if char is good ret main: mov

我想的是将堆栈指针设置为函数,然后执行直到返回

编辑:我使用nasm和nlink

Edit2:我使用x86处理器

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

;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
Edit4:已解决,请参阅下面的答案。

汇编中没有“函数”,这是一个更高级别的概念

你不会说你在哪个处理器上工作,但是如果处理器有一条跳转到常规寄存器地址的指令,那当然是最简单的方法。例如,ARM可以做到这一点,并且

当然,如何将参数传递给子程序取决于您作为汇编程序中的程序员。您可以传入寄存器,或者在堆栈上传递,只要您能够生成调用,这并不重要。破解堆栈指针本身看起来既尴尬又奇怪。

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

你不会说你在哪个处理器上工作,但是如果处理器有一条跳转到常规寄存器地址的指令,那当然是最简单的方法。例如,ARM可以做到这一点,并且


当然,如何将参数传递给子程序取决于您作为汇编程序中的程序员。您可以传入寄存器,或者在堆栈上传递,只要您能够生成调用,这并不重要。破解堆栈指针本身看起来既尴尬又奇怪。

好的,所以它相对简单:

aFunction:
    ;do stuff here
    ret

callFunctionInEax:
    call    eax
    ret

main:
    mov     eax, aFunction
    call    callFunctionInEax
    ret

好的,所以它相对简单:

aFunction:
    ;do stuff here
    ret

callFunctionInEax:
    call    eax
    ret

main:
    mov     eax, aFunction
    call    callFunctionInEax
    ret

正如你的标题:是的,这是微不足道的可能。请用一个例子说明你想要达到的目标,以及你在实现目标过程中遇到的问题。正如你的标题所示:是的,这几乎是不可能的。请用一个例子说明你想要达到的目标以及你在实现目标过程中遇到的问题。谢谢你的回答!现在我只需要找出我的子程序的地址。也许我可以使用Ollydbg,我不确定。@zsolt-z大多数汇编程序都支持符号。因此,将
mov r2,IsCharGood
替换为
lea r2,IsCharGood
,您已经在r2中找到了IsCharGood的地址。谢谢您的回答!现在我只需要找出我的子程序的地址。也许我可以使用Ollydbg,我不确定。@zsolt-z大多数汇编程序都支持符号。因此,将
mov r2,IsCharGood
替换为
lea r2,IsCharGood
,您就得到了r2中IsCharGood的地址。正常的调用约定是在堆栈上传递args作为32位,或在寄存器中传递args作为64位。正常的调用约定是在堆栈上传递参数(32位),或在寄存器中传递参数(64位)。但是是的,这是有效的。