有关内联汇编的问题 , 调用C函数Release版本奔溃了! ?

agool123456 2014-11-02 10:13:12

#include <stdio.h>
#include <windows.h>


int main()
{

static char szTmpBuff[256];
const char* pExp="%x %s" ;
char* str1="asdfaf";
__asm{
push str1
push 123456
push pExp
lea eax,szTmpBuff
push eax
call sprintf
add esp,0x10
}
system("pause");
return 0;
}

怎么显式的去调用一个C库函数 ? 调用其他API 却没问题
...全文
114 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
agool123456 2014-11-03
  • 打赏
  • 举报
回复
引用 2 楼 passion_wu128 的回复:
这很好解决啊,你按你的参数调用sprintf函数,然后调试,在汇编窗口就能看到正确的汇编码了。(最好在release下看,debug下没有优化,有很多冗余的指令)
对比之后 , release C的导入函数 第一个跳转就有问题 , 直接到程序领空的空内存去了.
agool123456 2014-11-03
  • 打赏
  • 举报
回复
引用 1 楼 lovesmiles 的回复:
sprintf是变长参数的函数 变长参数的入栈似乎有点不一样
应该不是参数问题 , 那为什么在Debug模式下没问题 ?
agool123456 2014-11-03
  • 打赏
  • 举报
回复
引用 2 楼 passion_wu128 的回复:
这很好解决啊,你按你的参数调用sprintf函数,然后调试,在汇编窗口就能看到正确的汇编码了。(最好在release下看,debug下没有优化,有很多冗余的指令)
这个我知道, 关键怎么解决啊
passion_wu128 2014-11-02
  • 打赏
  • 举报
回复
这很好解决啊,你按你的参数调用sprintf函数,然后调试,在汇编窗口就能看到正确的汇编码了。(最好在release下看,debug下没有优化,有很多冗余的指令)
勤奋的小游侠 2014-11-02
  • 打赏
  • 举报
回复
sprintf是变长参数的函数 变长参数的入栈似乎有点不一样

69,337

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧