勇往直前 发表于 2013-7-21 22:04:54

对call指令的理解,如:call DWORD ptr DS:[ MmGetSystemRoutineAddress]


在x86下的call

在 windows 模式下的
call DWORD ptr DS:[ MmGetSystemRoutineAddress]
有个高人告诉我:call MmGetSystemRoutineAddress 可以代替
call DWORD ptr DS:[ MmGetSystemRoutineAddress] ,说编译器会自动加上“[]”
这按x86汇编思路来想windows 模式的汇编,好象不一样了,想不通了

按x86的想[ MmGetSystemRoutineAddress]应该是代表MmGetSystemRoutineAddress指向的值。
call MmGetSystemRoutineAddress 怎么能和call DWORD ptr DS:[ MmGetSystemRoutineAddress] 是表达的

一样的含义呢?

还有一种call DWORD ptr DS:[<&kernel32.getversion >]

这里的:<&kernel32.getversion >]是什么含义? 和上边的有什么不同?











SilverMagic 发表于 2013-7-22 19:01:50

liangivws 发表于 2013-7-22 19:47:17

你看下小甲鱼OD教程 那里有好象是第3课。。。你用符号帮助就会明白第2个是什么东西。我新学也解析不清楚。

大娱乐家_╮ 发表于 2013-7-22 21:01:05

鱼OD教程 那里有好象是第3课。。。

勇往直前 发表于 2013-7-23 07:33:09

SilverMagic 发表于 2013-7-22 19:01 static/image/common/back.gif
回答你第一个问题吧,第二个不懂
你应该是立即数寻址和直接寻址弄混了
立即数寻址:


看了您的回答,我想我已经找到我想错的地方了!非常感谢!
我是对直接寻址掌握的不够!
mov ax,0123h
mov ,ax
mov word ptr .0
jmp dword ptr
执行后   cs:ip指向0000:0123
我看以上书中代码时,把看做是一个变量了!因为bx也是经常变化的值!
这也是错误的原因!
如果这里
出现jmp dword ptr 和jmp bx 应该是不同的含义吧!寄存器bx为地址的位置放着0123
如果bx里存放1001h cs=0000jmp bx应该为等价为 jmp1001
就不会象jmp dword ptr [变量]和jmp [变量]含义相同!
我这样想,对吧?

水晶年华 发表于 2013-7-23 09:41:58

call后是调研用子程序或内存地址,万变不离其中,,,无非就是PUSH CS,IP--JMP

SilverMagic 发表于 2013-7-23 09:51:29

阔怀 发表于 2015-8-17 10:32:28

{:1_1:}
页: [1]
查看完整版本: 对call指令的理解,如:call DWORD ptr DS:[ MmGetSystemRoutineAddress]