| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 995 人关注过本帖
标题:谁帮我翻译一下,谢谢
只看楼主 加入收藏
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
回复 10楼 wp231957
dll可以用全局变量,你检查一下你的调用可能把那个传进去的字符串写完的内存过大了

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-09 22:28
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
一共申请了20个char  怎么会过大呢

DO IT YOURSELF !
2012-12-09 22:35
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:16 
typedef void (WINAPI *MYFUNC)(int,int,char*);
吧这个改成typedef void (*MYFUNC)(int,int,char*);看看

如果这样好了就是调用规范的问题


“一共申请了20个char  怎么会过大呢” 你还不明白堆栈破坏的原理啊,如果是堆栈破坏,就是说你申请哦20个char 但是你往里面写入了 大于20个char的数据,这就是说写入的内存过大导致堆栈破坏,并不是说你申请了很大的内存~~

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-09 22:37
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用yuccn在2012-12-9 22:37:31的发言:

typedef void (WINAPI *MYFUNC)(int,int,char*);
吧这个改成typedef void (*MYFUNC)(int,int,char*);看看

如果这样好了就是调用规范的问题


“一共申请了20个char  怎么会过大呢” 你还不明白堆栈破坏的原理啊,如果是堆栈破坏,就是说你申请哦20个char 但是你往里面写入了 大于20个char的数据,这就是说写入的内存过大导致堆栈破坏,并不是说你申请了很大的内存~~
还真是如此
手懒了,当时想把winapi去掉 测试一下的
但是想当然的认为 和winapi无关  实际上貌似winapi 就是执行了stdcall吧

DO IT YOURSELF !
2012-12-09 22:39
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用yuccn在2012-12-9 22:37:31的发言:

typedef void (WINAPI *MYFUNC)(int,int,char*);
吧这个改成typedef void (*MYFUNC)(int,int,char*);看看

如果这样好了就是调用规范的问题


“一共申请了20个char  怎么会过大呢” 你还不明白堆栈破坏的原理啊,如果是堆栈破坏,就是说你申请哦20个char 但是你往里面写入了 大于20个char的数据,这就是说写入的内存过大导致堆栈破坏,并不是说你申请了很大的内存~~
258转换成16进制就是102 远远小于20呢

DO IT YOURSELF !
2012-12-09 22:42
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
网上抄的代码害人啊

 typedef void (WINAPI *MYFUNC)(int,int,char*);
    MYFUNC mydec2yyy = NULL;
    mydec2yyy = (MYFUNC)GetProcAddress(hDllInst,"dec2yyy");

其实到现在  粉色的代码的具体含义 我仍然是似似而非

DO IT YOURSELF !
2012-12-09 22:43
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
回复 14楼 wp231957
是这个问题就好,不过楼主知道调用规范不统一为什么就会出现这个问题吗?如果不知道,建议学习下~~~如果你从事it行业不会没有好处的

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-09 22:44
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
回复 15楼 wp231957
我担心的是代码逻辑有问题导致了写完大于20个字节而已 ^_^

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-09 22:46
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用yuccn在2012-12-9 22:44:59的发言:

是这个问题就好,不过楼主知道调用规范不统一为什么就会出现这个问题吗?如果不知道,建议学习下~~~如果你从事it行业不会没有好处的
哈哈,我都奔4的人了,估计不会改行从事挨踢

另:调用规范不一致的主要原因不就是函数的形参入栈顺序不一样吗

DO IT YOURSELF !
2012-12-09 22:51
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
回复 19楼 wp231957
主要原因不是参数顺序问题,问题在于是调用者来平衡堆栈还是被调用者来平衡堆栈

也就是说参数入栈的时候,调用规范不统一,就可以出现没有平衡堆栈就返回了,这个时候去esp获取返回地址的时候,由于堆栈还没有平衡,获取到的返回地址esp就是个错误的地址,
返回不了给调用者了,导致崩溃~~~

[ 本帖最后由 yuccn 于 2012-12-9 23:12 编辑 ]

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-09 22:58
快速回复:谁帮我翻译一下,谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017178 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved