能力值:
( LV9,RANK:180 )
|
-
-
2 楼
试试
push 01050000
ret
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
因为只能改一行代码,就是原来的CMP EAX,****那里,如果先PUSH再JMP就会增加字节了吧?
|
能力值:
( LV9,RANK:180 )
|
-
-
4 楼
不知LZ的Code是举例or实例?
若是实例的话, 你的MyCode等于 mov eax, 0156EB4
直接将 00427B9E CMP EAX,0156EB4
改成 00427B9E MOV EAX,0156EB4
不就得了?
00427B9E CMP EAX,0156EB4
00427BA3 ..................
不知这 ....... 是 jz or jnz
若希望的流程是固定的, 改为 jmp 或 nop 掉即可.
否则你写的 MyCode, 将会是2种状况.
若是举例的话,
00427B9E CMP EAX,0156EB4
00427BA3 ..................
二行加起来够用 push xxxxxxxx ' ret 了
你写的MyCode, 一样, push xxxxxxxx ret 回来看你要到那里.
请问一下你Delphi是几版的?
你DELPHI的内联汇编 写 jmp $01050000 可以Compile过去?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我是举的实例,我用的D7,如果是写JMP $1050000是不能编译通过的。如果把$1050000换成指针就可以通过,但是编译后就成了JMP DWORD PTR[********]类似的东西了。
还有MYCODE那里只是我写的个简单的例子,实际上我是要在MYCODE里对EAX进行N多种判断并返回相应的值的。
JMP 后面应该跟POINTER吧?为什么我用JMP JMPTmp(JMPTmp为pointer类型)还是跳不到我申请的程序段去执行呢?
|
能力值:
( LV9,RANK:180 )
|
-
-
6 楼
试试
mov addr1, $01050000
jmp addr1
或
mov eax, $01050000
jmp eax
二者皆可
|
能力值:
( LV9,RANK:420 )
|
-
-
7 楼
sessiondiy大牛全能啊,膜拜
|
能力值:
( LV9,RANK:180 )
|
-
-
8 楼
我...昨天刚学
|
能力值:
( LV9,RANK:420 )
|
-
-
9 楼
我。。。无语
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
谢谢sessiondiy的热心有助。我用你刚才说的push ***** ret实现并成功了,太感谢你了。
还有一点要请教的就是,因为是通过VirtualAllocEx申请内存,在输入参数“申请空间的大小”的时候,能不能用sizeof(程序名)来取得要写入的程序段的大小呢?因为有可能要经常改动MYCODE的代码,总不可能每次都写入后再用OD去看,计算有多少字节,然后再写入吧?
|
能力值:
( LV9,RANK:180 )
|
-
-
11 楼
那就写大一点吧
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
没有一个可以用于计算的吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
sessiondiy:
因为申请的内存空间是不固定的,那怎么才能使push后面的地址随这个变呢?
|
|
|