怎样在汇编中实现地址转跳数组呢?

mme 2006-08-23 09:22:51
我想在汇编中实现一个类似下面这样的函数数组,但是不知道怎么实现,各位有什么好方法吗?

....
jmp dword ptr [eax*4+0XXXXXXh]

func1:
mov ....

func2:
mov ....


0XXXXXXh:
func1
func2


上面的代码都是在同一个函数里面
0XXXXXXh 开始的地址保存了函数func1和func2的地址,通过jmp dword ptr [eax*4+0XXXXXXh]来转跳到func1或者func2,由eax控制转跳到哪一个地址

但是我不知道用汇编怎么实现,有谁做过这样的吗?
...全文
221 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mme 2006-08-24
  • 打赏
  • 举报
回复
【那为何要用汇编实现?C实现即可】

呵呵,C和纯汇编都能实现,但是因为某些原因导致允许用啊,没办法
mme 2006-08-23
  • 打赏
  • 举报
回复
哈哈,找到了一个很笨的方法:
__declspec(naked) int test()
{
static DWORD Array[2] = {0, 0};

__asm
{
mov dword ptr Array, offset func1;
mov dword ptr (Array+4), offset func2;
mov eax, 0;
jmp dword ptr Array[eax*4];
func1:
mov eax, 1;
ret;
func2:
mov eax, 2;
ret;
}
}

每次运行的时候都初始化一次,虽然慢点,但是能实现

Areslee 2006-08-23
  • 打赏
  • 举报
回复
那为何要用汇编实现?C实现即可
mme 2006-08-23
  • 打赏
  • 举报
回复
如果我是想在vc中内嵌汇编来实现,可以么?
mme 2006-08-23
  • 打赏
  • 举报
回复
非常感谢两位的指导,我先试试能不能实现,因为我见过这样的代码,但是不知道那些地址是怎么写的。
zara 2006-08-23
  • 打赏
  • 举报
回复
这个有两个问题吧. 一个是如何定义跳转地址数组; 另外一个就是如何确定跳转索引.
地址数组大致是: Entries_Array dd func1, func2, ...
跳转索引的问题, 这个要求和上面的函数的定义配合了. 不是所有的可能情形都是适合用这个方法的. 比较适合于连续条件的场合. 比如是用户选择 'A' ~ 'D' 分别执行 func1, func2, func3 和 func4. 则可以:
movzx eax, keySelected ; keySelected 为 'A' ~ 'D'
... ; 这里可以对 eax 进行范围检查
sub eax, 41h
jmp dword ptr Entries_Array[eax*4]
Areslee 2006-08-23
  • 打赏
  • 举报
回复
function1: xxxx
...
function2: xxxx
...
function3: xxxx
...
function4: xxxx
...


entry dd offset function1
dd offset function2
dd offset function3
dd offset function4


.....
mov eax,functionid
call entry[eax*4]

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧