不太懂汇编 指针问题

ylae 2007-04-15 11:11:12
void Show(char *P)
{


char *szTemp=new char[33];
strcpy(szTemp,P);



DWORD dwAddr=0x00487760;
_asm
{

push 0
push szTemp
push 31


call dwAddr
add esp,0x0C

}
delete[] szTemp;
}

这是一个游戏显示这符的函数
szTemp是字符串指针
Show("我成功了") 这样游戏就有显示

void Show(char *P)
{
DWORD dwAddr=0x00487760;
_asm
{

push 0
push P
push 31


call dwAddr
add esp,0x0C

}

}

要是这样改,Show("我成功了") 这样游戏就没有显示

实在搞不懂
char *szTemp=new char[33];
strcpy(szTemp,"我成功了");
........
delete[] szTemp;

char *P="我成功了";



实在搞不懂在这段汇编代码有什么区别,两个指针为什么前者调用显示,后者没有显示!!!


...全文
307 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mengshijie_1981 2007-04-16
  • 打赏
  • 举报
回复
char *szTemp=new char[33];//在堆栈上分配33个字节的内存,szTemp是这个33字节内存的地址。
strcpy(szTemp,"我成功了");//拷贝“我成功了”到新分配的33个内存地址前8个字节空间里。
........
delete[] szTemp;//释放这33个字节的内存空间

char *P="我成功了";//分配9(8个字符后面有1个空格)个字节的内存空间,并将“我成功了”和1个空格填充到这9个字节的内存空间里。

DWORD dwAddr=0x00487760; 这个函数的地址(0x00487760)是怎样得到的?
ylae 2007-04-16
  • 打赏
  • 举报
回复
0x00487760 是OllyDbg跟踪得到的

就说下面这个
void Show(char *P)
{
DWORD dwAddr=0x00487760;
_asm
{

push 0
push P
push 31


call dwAddr
add esp,0x0C

}

}

也许是DelphiGuy兄说的那样,和显示部份代码有关
  • 打赏
  • 举报
回复
楼主的意思是为什么直接使用传进来的串指针就不行,使用复制的串就可以显示了?
从你的程序中确实看不出问题来,可能与0x00487760显示部分的代码有关。

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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