免费注册 查看新帖 |

Chinaunix

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

[C] 如何将汇编语言对应的二进制码写入文件(*.obj) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-01-09 17:42 |只看该作者
原帖由 lenovo 于 2008-1-9 17:31 发表
你要是写int,long int之类的,
使用fprintf呀。有格式控制的。

这样写就和obj的那种不同了,我今天试了一下只用fwrite可以写出obj的标准,不过奇怪的是,数值不一样时,输出文件的类型居然不同
有时file的结果是data,有时是DOS executable (device driver),千奇百怪,还有什么"AmigaOS bitmap font",寒死
还有,我在linux用hexdump看我的内容都是对的...但是ultraedit不打开16进制编辑模式,那是有时显示正确,有时候不...我倒...

[ 本帖最后由 kelela 于 2008-1-9 17:45 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2008-01-09 18:14 |只看该作者
汗.我做的结果原来一直是对的.
fwrite的用法也完全正确,hexdump也没骗我...
ultraedit的显示有问题...汗死,有时候显示正确,有时候显示乱字符(根据数值不同),nnd害我花了一个晚上,才发现我的结果完全正确无误,和老师给的memcpy.o完全一致(用diff命令都比对过了,完全相同)

天杀的ultraedit必须要强制开启16进制编辑模式才能每次都正确显示(要手动),默认情况下打开二进制文件有时显示hex码,有时就是乱字符

我已经无语了...花了8小时学会开启ultraedit的16进制编辑模式功能:em11: 早知道用hexdump就完事了,唉.以后学术的东西,还是全用linux和下面的软件好了.(学校规定计算机系所有作业必须在linux完成并调试通过,我还是用了win+putty,虽说我用linux的历史和windows几乎一样长,没有习惯问题...但是win还是作桌面更为傻瓜...扯远了)
谢谢各位.

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
13 [报告]
发表于 2008-01-09 22:50 |只看该作者
你说你用ue看会出错,我就怀疑是不是ue本身的问题。
打算回复你的帖子。不过想想自己也没啥确凿证据,
还是算了吧,写好的回复也没发。

论坛徽章:
0
14 [报告]
发表于 2008-01-09 23:31 |只看该作者
原帖由 lenovo 于 2008-1-9 22:50 发表
你说你用ue看会出错,我就怀疑是不是ue本身的问题。
打算回复你的帖子。不过想想自己也没啥确凿证据,
还是算了吧,写好的回复也没发。

起初我也不信,后来我用下面代码试了几次,发现ue确实是这样
我做了3个试验,第一个和第三个制取-1和70000(dec),显示都不正常
第二个70(dec),显示正常

代码如下:
#include <stdio.h>

int main(void)
{
FILE *fp;
long b=70000;/*-1,70,70000*/

fp=fopen("mem.o","wb");
fwrite(&b,sizeof(long),1,fp);
fclose(fp);
return 0;
}

附件中是这三次生成的obj

[ 本帖最后由 kelela 于 2008-1-9 23:45 编辑 ]

obj.zip

368 Bytes, 下载次数: 39

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP