vc 内嵌汇编是不能用db xxh,xxh...这样的操作方法。
现在我用vc的byte[]={...};来定义的。
我的代码是这样的
__asm{
//...
mov edx, dword ptr ss:[ebp+18h]
mov esi, dword ptr ss:[ebp+14h]
push edx
push esi
push ecx
push edi
call _after //这个是调用_after标签
mov esi, dword ptr ds:[esi]
add esi, dword ptr ss:[ebp+10h]
mov ecx, dword ptr ss:[ebp+10h]
mov ebx, eax
....
}
__asm
{
_after:
//源代码是 db 055h, 08Bh, 0ECh, 083h, 0ECh, 01Ch, 053h, 056h, 08Bh, 075h, 00Ch, 057h...
//现在用vc 定义的byte数组 byte bts[] ={...};现在里面该怎么写?后面跟着的代码是memset
//或者用更好的方法替代db定义
//我尝试使用 push bts 和 call bts 都失败了。
push bts
call memset
//db 055h, 08Bh, 0ECh, 083h, 0ECh, 01Ch, 053h, 056h, 08Bh, 075h, 00Ch, 057h...
call memset
_end:
}
汇编里是不是可以用sub x,20 来定义一个内存区域来存储这个变量。
具体代码应该怎么写?
vc 有个伪指令_emit 相当于db 1个字节 这样太繁琐 而且我也没看到效果。
------解决方案--------------------
你可以写一个转换脚本自动将db或C数组形式转换为_emit的格式,然后将结果字符串复制粘贴到_asm即可.
------解决方案--------------------
__asm
{
_emit 0x55
...
------解决方案--------------------
我有一个不太好的办法,先把你要定义的数据段反汇编一下,插入到代码段,执行的时候跳过去就行了,如下图所示!



------解决方案--------------------
这个可以用宏来实现,比如:
#define DB(a) __asm __emit a
#define DB2(a, b) __asm __emit a __asm __emit b
#define DB3(a, b, c) DB(a) DB2(b, c)
#define DB4(a, b, c, d) DB2(a, b) DB2(c, d)
#define DB5(a, b, c, d, e) DB(a) DB4(b, c, d, e)
其他依此类推,估计写到DB16就足够了。
然后就可以:
__asm{
DB16(0x55, 0x8b, 0xec, ...)
}