首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

哪位高手帮小弟我详细地讲解一下这段代码的汇编指令的意思,小弟我汇编还在学习中,很菜。

2013-09-05 
谁帮我详细地讲解一下这段代码的汇编指令的意思,我汇编还在学习中,很菜。。。如题:11:_snprintf(cBuf, MAX_LE

谁帮我详细地讲解一下这段代码的汇编指令的意思,我汇编还在学习中,很菜。。。
如题:

11:       _snprintf(cBuf, MAX_LEN, "%d: %s", nPid, cBuf); /* cBuf既是源又是目标,函数使用不安全 */
0040D770   lea         ecx,[ebp-404h]
0040D776   push        ecx
0040D777   mov         edx,dword ptr [ebp-408h]
0040D77D   push        edx
0040D77E   push        offset string "sizeof(a):%d\n" (0042201c)
0040D783   push        400h
0040D788   lea         eax,[ebp-404h]
0040D78E   push        eax
0040D78F   call        _snprintf (00406f20)
0040D794   add         esp,14h

[解决办法]


_snprintf(cBuf, MAX_LEN, "%d: %s", nPid, cBuf); /* cBuf既是源又是目标,函数使用不安全 */
0040D770   lea         ecx,[ebp-404h]//cBuf的地址
 0040D776   push        ecx //cBuf的地址入栈
 0040D777   mov         edx,dword ptr [ebp-408h]
 0040D77D   push        edx//nPid入栈
 0040D77E   push        offset string "sizeof(a):%d\n" (0042201c) //"%d: %s"地址入栈
 0040D783   push        400h//MAX_LEN入栈
 0040D788   lea         eax,[ebp-404h]
 0040D78E   push        eax//cbuf入栈
 0040D78F   call        _snprintf (00406f20)//调用函数
 0040D794   add         esp,14h//出栈




[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:


_snprintf(cBuf, MAX_LEN, "%d: %s", nPid, cBuf); /* cBuf既是源又是目标,函数使用不安全 */
0040D770   lea         ecx,[ebp-404h]//cBuf的地址
 0040D776   push        ecx //cBuf的地址入栈
 0040D777   mov         edx,dword ptr [ebp-408h]
 0040D77D   push        edx//nPid入栈
 0040D77E   push        offset string "sizeof(a):%d\n" (0042201c) //"%d: %s"地址入栈
 0040D783   push        400h//MAX_LEN入栈
 0040D788   lea         eax,[ebp-404h]
 0040D78E   push        eax//cbuf入栈
 0040D78F   call        _snprintf (00406f20)//调用函数
 0040D794   add         esp,14h//出栈


是什么样的执行过程导致出现了这个结果:0: 0: 0: 0: 0: 的,我大致明白是什么原因,但是想弄清楚其具体的过程。。。

直接看源码,不要看汇编。 源码都够复杂,应该有个有限状态机。

建议查看函数的使用手册。

我的意思不是说要把每一行的执行过程都讲清楚,就是具体地说一下是什么步骤出现这个结果,先干什么,再干什么,最后干什么出现这个结果的。。。

什么结果?
不就是参数从右往左依次进栈,call fun,然后再由调用者平衡堆栈吗?
汇编代码很直接了当嘛

我是说的结果是这句代码出现0: 0: 0: 0: 0: 的这个结果

sprintf,memcpy,这类函数如果源地址和目标一样,结果是未定义的。最好不要这样用。
如果非要纠结结果,从你给出的汇编代码是不够的,你得给出
_snprintf (00406f20)
的汇编代码(最好是C源代码)

热点排行