首页
社区
课程
招聘
未解决 [求助]关于asm内联汇编
发表于: 2020-3-1 05:41 2624

未解决 [求助]关于asm内联汇编

2020-3-1 05:41
2624
请教一个问题  我在HOOK一个DLL函数 然后这个DLL函数的第一个参数是const char *  json_msg 我想把它保存到

C这个变量里面 _asm怎么写  付费请教

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 6
活跃值: (348)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mov c,eax 
pop eax
去掉 
调用函数取返回值
2020-3-1 08:00
0
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
3
你怎么把四个字节的值存到一个字节的char里呢
2020-3-1 08:43
0
雪    币: 198
活跃值: (81)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
QQ1214554466
2020-3-1 10:03
0
雪    币: 775
活跃值: (2357)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
你得把c定义足够大
...
mov ecx, json_msg_Len
mov esi,[arg1]
lea edi,c
cld
rep  movsb
...
最后于 2020-3-1 12:51 被AperOdry编辑 ,原因:
2020-3-1 12:49
0
雪    币: 421
活跃值: (276)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
char * pChar;
_asm{
     mov dword ptr ds:[pChar],Someaddr
}
size_t s = strlen(pChar);
char * ret = new char[s];
memcpy_s(ret,s,pChar,s);
或者直接用detours hook
最后于 2020-3-1 14:16 被d3ysi编辑 ,原因:
2020-3-1 14:14
0
雪    币: 399
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
char* 不能解决问题吗
2020-3-1 15:00
0
雪    币: 2510
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
感谢分享
2020-3-11 12:54
0
雪    币: 251
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
push 是eax, pop是ecx 有问题
c 定义有问题
实际使用 函数定义最好申明成 naked
如下方式, 测试正常

int                Test1(CHAR *pText)
{
       OutputDebugStringA(pText);
       return 1;
}

CHAR        *p;

__declspec(naked) VOID        TestH()
{
       _asm 
       {
               push eax;
               mov eax,[esp+8];
               mov p,eax;
               pop eax;
               jmp Test1;
       }
}

测试代码:
       int (*fun1)(CHAR *pText) = &Test1;
       fun1("asdf");
       int (*fun2)(CHAR *pText) = (int (*)(CHAR *pText))&TestH;
       fun2("zxcv");

2020-3-13 15:38
0
雪    币: 591
活跃值: (131)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
       char* tmpc;
       __asm mov eax, [esp + 8];
       __asm mov tmpc, eax;
       strcpy(c, tmpc);
2020-3-20 16:44
0
雪    币: 1848
活跃值: (2170)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
你自己也说了第一个参数是const char *,那么你的c应声明为char*,这也是3楼所述存在的问题。当然这样保存的是该字符串的指针。如果需要复制字符串,那么你应该将c声明为char类型数组,参考5楼、10楼的方式使用指令将字符依次拷贝到c中。
最后于 2020-3-20 17:10 被Ratin编辑 ,原因:
2020-3-20 17:08
0
游客
登录 | 注册 方可回帖
返回