免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 老手
打印 上一主题 下一主题

从asm角度看C/C++  关闭 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2008-12-28 23:24 |只看该作者
原帖由 mik 于 2008-12-28 23:18 发表
我是说是不是用 ida 反汇编的,没说你用手写

没听说过 ida 吗?

你贴的这段代码,怎么和 ida 反汇编后的那么像?

别说你是直接用g++生成汇编后贴出来,那是intel语法


linux下有AS,还有NASM。

论坛徽章:
0
42 [报告]
发表于 2008-12-28 23:29 |只看该作者
原帖由 老手 于 2008-12-28 23:24 发表


linux下有AS,还有NASM。


as、nasm 与 那你那段代码语法有区别的。
你那段代码是怎么得来的?

论坛徽章:
0
43 [报告]
发表于 2008-12-28 23:32 |只看该作者
原帖由 老手 于 2008-12-28 23:22 发表
我这里面说的重点不在指令级别的。前面也有朋友说了 , 单条指令是看得懂的 , 但整体就不行了。

我这里边重点是放在大的框架上 , 是在跟C/C++的高层概念的联系上 , 而且是linux下的GNU C/C++ .

比如 ...


这贴子,你根本没说明什么?

你倒底想说明什么??

你如果想用 assembly 来理解 c/c++,那你就贴些有能说明问题的例子,然后组织好语言来表达你想说明的问题,

可惜这贴子里没有。




算了,我还是不和你扯了。

论坛徽章:
0
44 [报告]
发表于 2008-12-28 23:34 |只看该作者
怎么来的就那么重要?

论坛徽章:
0
45 [报告]
发表于 2008-12-28 23:34 |只看该作者


只有感觉你在忽悠人

论坛徽章:
0
46 [报告]
发表于 2008-12-28 23:37 |只看该作者
原帖由 老手 于 2008-12-28 23:34 发表
怎么来的就那么重要?

这点小事都不能说清楚!有点怀疑真实性~

不过: 看你自我感觉良好

偶就不和你扯了,你继续


PS: 这段代码真的很像是 ida 生成的

我就只见过 ida 才会这样表示变量的:

var_28          = dword ptr -28h
var_24          = dword ptr -24h
var_14          = dword ptr -14h
var_C           = dword ptr -0Ch
var_8           = dword ptr -8
var_4           = dword ptr -4

[ 本帖最后由 mik 于 2008-12-28 23:40 编辑 ]

论坛徽章:
0
47 [报告]
发表于 2008-12-28 23:40 |只看该作者
原帖由 mik 于 2008-12-28 23:32 发表


这贴子,你根本没说明什么?

你倒底想说明什么??

你如果想用 assembly 来理解 c/c++,那你就贴些有能说明问题的例子,然后组织好语言来表达你想说明的问题,

可惜这贴子里没有。



算了,我 ...


筑巢引凤 , 让同样对这角度有见解的人发表看法 , 从而更深刻地了解C/C++的有关概念。

同时我也会发表我的看法 ,听听大家的意见 , 与各位一同提高。

论坛徽章:
0
48 [报告]
发表于 2008-12-28 23:43 |只看该作者
原帖由 老手 于 2008-12-28 23:40 发表


筑巢引凤 , 让同样对这角度有见解的人发表看法 , 从而更深刻地了解C/C++的有关概念。

同时我也会发表我的看法 ,听听大家的意见 , 与各位一同提高。




您是某位的马甲吧~~ 作风像~ 

论坛徽章:
0
49 [报告]
发表于 2008-12-28 23:46 |只看该作者
原帖由 mik 于 2008-12-28 23:34 发表


只有感觉你在忽悠人


技术的东西岂能忽悠了人 , 这里可是CU , 藏龙卧虎之地 。

您见笑了  , 请谅解。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
50 [报告]
发表于 2008-12-29 08:29 |只看该作者
原帖由 老手 于 2008-12-27 22:19 发表
趁此机会谈谈:

一个线程对long类型变量进行修改,多个线程只读这个long类型值,需要加锁吗?http://bbs.chinaunix.net/thread-1336429-1-1.html


在上面的两段汇编,都是函数 , 返回 long long型 , 64位。宿主机均为32位机。

在PowerPC中 , 值存放在  r3 r4 两个寄存器返回 ; x86下的值放在 edx eax .

本人的未经证实的观点是 : 变量不能存在于通用寄存中 , 它必在各数据段 或者说是内存中。

于是 , 上述返回值必然多次操作才能到位 ! 由于这些储存操作通常不是原子动作 , 所以它们完全有被其他线程打破的可能  , 从而导致读出错误 !

虽然 , 上面帖子里提到的是long型 , 但随平台的不同具体实现也不同 , 总之风险是存在的 , 加锁是必须的。


我的理解,如果只用在一般的PC服务器和小型机等,如果只是int或者long,只要一条指令就能完成对该变量内存地址的修改,应该不需要加锁吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP