免费注册 查看新帖 |

Chinaunix

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

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

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


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

您见笑了  , 请谅解。


你是做啥工作的?转行做 BSP 吧。

论坛徽章:
0
52 [报告]
发表于 2008-12-29 09:46 |只看该作者
原帖由 老手 于 2008-12-27 20:23 发表
谢谢ls几位。

看看x86的 , 几乎一样。

var_28          = dword ptr -28h
var_24          = dword ptr -24h
var_14          = dword ptr -14h
var_C           = dword ptr -0Ch
var_8            ...



看这个X86汇编   翻译大概意思是这样吧    这是大概思路 变量和其他定义代码不确的哦 这只是该反汇编代码不知道错了没    大家不要BS
var_14          = dword ptr -14h
var_C           = dword ptr -0Ch     这样一般都是IDA  定义的   -一般都是局部变量  



mian(var_8,var_4,edx)
{
    long int var_c,var8,var4;      //esi,edi         int var14;   /*这个估计是一个结构体*/
    long temp=0x10624dd3;        //ebx
    gettimeofday(&var14,0);
    ecx=var14;
    eax=var14*0x3e8;     VAR14不知道是什么结构体所以直接表示
    var_8=var_4=eax;
    eax*=temp;
    var_8>>=0x1f;     //esi
    var_4>>=0x1f;     //edi
    temp=edx;
    ecx=temp=temp/36-ecx;
    temp>>=0x1f;
    ecx+=var_8;
    var_8=var8;
    temp+=var_4;
    var_4=var8;
    eax=ecx;          //下面这两个是返回值吧
    edx=temp;
   
}

[ 本帖最后由 251750675 于 2008-12-29 09:57 编辑 ]

论坛徽章:
0
53 [报告]
发表于 2008-12-29 10:11 |只看该作者
汇编好多年没用了,学习

论坛徽章:
0
54 [报告]
发表于 2008-12-29 17:55 |只看该作者
无语,楼主自我感觉很好嘛。

论坛徽章:
0
55 [报告]
发表于 2008-12-29 23:08 |只看该作者
原帖由 abutter 于 2008-12-29 09:07 发表


你是做啥工作的?转行做 BSP 吧。


哪能说转就转得了呢 , 外行看起来容易 , 往往等做了才发现不是那回事。

论坛徽章:
0
56 [报告]
发表于 2008-12-29 23:41 |只看该作者
原帖由 251750675 于 2008-12-29 09:46 发表


看这个X86汇编   翻译大概意思是这样吧    这是大概思路 变量和其他定义代码不确的哦 这只是该反汇编代码不知道错了没    大家不要BS
var_14          = dword ptr -14h
var_C           = dword ptr -0Ch     这样一般都是IDA  定义的   -一般都是局部变量  

mian(var_8,var_4,edx)
{
    long int var_c,var8,var4;      //esi,edi         int var14;   /*这个估计是一个结构体*/

    long temp=0x10624dd3;        //ebx

    gettimeofday(&var14,0);
    ecx=var14;
    eax=var14*0x3e8;     VAR14不知道是什么结构体所以直接表示
    var_8=var_4=eax;
    eax*=temp;
    var_8>>=0x1f;     //esi

    var_4>>=0x1f;     //edi

    temp=edx;
    ecx=temp=temp/36-ecx;
    temp>>=0x1f;
    ecx+=var_8;
    var_8=var8;
    temp+=var_4;
    var_4=var8;
    eax=ecx;          //下面这两个是返回值吧

    edx=temp;
   
}



你肯定不常在linux下用C/C++编程 , 要不然你应当知道“VAR14是什么结构体”的。
你说的没错 , 变量名肯定没法确定 , 但即便你真的被我猜中 ,你的平台是windows , 你也应该看出函数的返回类型才对啊 , 你没能写出来。

你可以再试试 。 我查过了,那段汇编本身没有问题。

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

没听说过 ida 吗?

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

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


gcc/g++倒是可以编译出Intel语法的汇编程序, 指定-masm=intel。 默认是-masm=att。

另外lz说nasm,那是搞笑。 gcc/g++能编译出什么样的代码, 和nasm有关系吗?

论坛徽章:
0
58 [报告]
发表于 2008-12-30 00:23 |只看该作者
原帖由 hellioncu 于 2008-12-29 08:29 发表


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


是的 ,要是一条指令就能完成对该变量内存地址的修改,是不需要加锁 。

论坛徽章:
0
59 [报告]
发表于 2008-12-30 00:46 |只看该作者
原帖由 albcamus 于 2008-12-29 23:47 发表


gcc/g++倒是可以编译出Intel语法的汇编程序, 指定-masm=intel。 默认是-masm=att。

另外lz说nasm,那是搞笑。 gcc/g++能编译出什么样的代码, 和nasm有关系吗?


讨论的重点是应该代码本身 ,转移话题讨论代码如何来的, 我觉得无此必要。

我更没有说我是编译出来未经处理就直接粘贴 , 这样解释得通吧。

论坛徽章:
0
60 [报告]
发表于 2008-12-30 09:12 |只看该作者
是吖  我是在WINDOWS下的   可以说完全没有接触过LINUX下的 呵呵

[ 本帖最后由 251750675 于 2008-12-30 09:15 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP