x86汇编调用标签来自字符串的地址

时间:2015-07-29 02:05:56

标签: assembly x86 nasm

我不确定x86汇编是否可以做到这一点,但我可以

mov eax, string
call string

my_funct:
mov ebx, hi_msg
call puts32 ;say hi
ret

string db 'my_funct', 0
hi_msg db 'Hi', 0

据我所知,我想在一个地址调用标签,我给它一个字符串,但是我可以将字符串转换为一个地址吗?如果是这样的话?当我尝试任何关于如何做到这一点的建议时似乎三重错误?

感谢superultranova,scott hunter和另一个发布但被删除的人,esm我想你的回复和帮助。我想出了

pop ebx ;num from stub
mov al, 2
mul bx ; mul 2 to correct offset (our funct_ptr are word not byte)
mov ebx, eax
mov eax, [funct_ptr + ebx]
call eax

funct00:
nop
ret

funct01:
mov ebx, hi_msg
call puts32 ;say hi
ret

funct02:
;not implemented
ret

funct_ptr:
dw funct00, funct01, funct02, 0

2 个答案:

答案 0 :(得分:1)

根据您的上述评论,关于字符串func00 - funcFF传递给您的程序。

您可以布置一个函数指针(地址)表,这些表以这样的方式存储,当您从字符串中解析出十六进制数字时,您将找到正确的指针。本质上,有一个FF指针表,并根据你从字符串中解析出的数字索引,并调用该地址。

答案 1 :(得分:0)

实际上,没有;运行时没有关于源代码中使用了什么标签的概念,更不用说它们与之关联的地址了。显然,这可以通过调试信息(调试器如何将标签与地址匹配)来实现,但这似乎超出了您尝试的范围。