能力值:
( LV2,RANK:10 )
|
-
-
2 楼
你究竟是想写汇编还是写机器码呢。 如果是汇编的话,各个主流编译器都是支持asm语法的。机器码的话,gcc可以用asm __volatile__ (".byte 0x12");的形式实现
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
winkar
你究竟是想写汇编还是写机器码呢。
如果是汇编的话,各个主流编译器都是支持asm语法的。机器码的话,gcc可以用asm __volatile__ (".byte 0x12");的形 ...
谢谢,汇编好像也是 asm关键字,机器码的话。是.byte关键字。。这个好像是gcc-as的,。。。哈哈
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
建议先做好汇编硬编码,有的编译器不支持asm。 auto *smAddr =mmap(0,字节码体积,PROT_EXEC|读|写,MAP_ANON,-1,0); const unsigned char* shellcode = 硬编码; RtlCopyMemory(smAddr,shellcode,体积); using Fx = void(*)();//函数类型自己更改 ((Fx)smAddr)();
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
lhxdiao
建议先做好汇编硬编码,有的编译器不支持asm。
auto *smAddr =mmap(0,字节码体积,PROT_EXEC|读|写,MAP_ANON,-1,0);
const unsigned ch ...
谢谢,还可以这样玩。老哥威武
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
ndk里写asm和普通的汇编不一样,x86的话用的是AT&T语法,和普通的x86汇编有很大区别
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
至于楼主你的代码,大概可以写成这样,需要注意的是AT&T语法中,操作数和被操作数的顺序与普通汇编相反 __asm volatile("push %ebp \n" "mov %esp, %ebp \n" "call xxxxxx \n" "mov %ebp, %esp \n" "pop %ebp \n");
|
|
|