我不确定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
答案 0 :(得分:1)
根据您的上述评论,关于字符串func00 - funcFF传递给您的程序。
您可以布置一个函数指针(地址)表,这些表以这样的方式存储,当您从字符串中解析出十六进制数字时,您将找到正确的指针。本质上,有一个FF指针表,并根据你从字符串中解析出的数字索引,并调用该地址。
答案 1 :(得分:0)
实际上,没有;运行时没有关于源代码中使用了什么标签的概念,更不用说它们与之关联的地址了。显然,这可以通过调试信息(调试器如何将标签与地址匹配)来实现,但这似乎超出了您尝试的范围。