首页
社区
课程
招聘
跪求各位好心人看看 c 和汇编互调用的问题[求助]
发表于: 2006-10-30 00:29 4156

跪求各位好心人看看 c 和汇编互调用的问题[求助]

2006-10-30 00:29
4156
初学汇编,就遇到这个棘手问题,搞了两三天了,还是没有弄好,各位能

帮忙看看吗,我尽量把问题说清楚,可能有点?嗦,请不要见怪,呵呵。

――――――――――――――――――汇编部分
.386
.model flat
extrn _x:dword
public _str

.data
_str        byte        'hello!',0
.code
VV                proc        C
       
                mov eax,_x
        ret

VV endp
end

―――――――――――――――――― c 部分
#include "stdafx.h"

extern int x;                               
extern char str[];
int _tmain(int argc, _TCHAR* argv[])
{
        printf("%s\n",str);
        return 0;
}

链接时产生以下错误:
asm.obj : error LNK2019: 无法解析的外部符号 _x,该符号在函数 _VV

中被引用
C.obj : error LNK2001: 无法解析的外部符号 "char * str" (?

str@@3PADA)

―――――――――――――――――――――― c 链接器设置
/OUT:"D:\abc\C\Debug\C.exe" /INCREMENTAL /NOLOGO /MANIFEST

/MANIFESTFILE:"Debug\C.exe.intermediate.manifest" /DEBUG

/PDB:"d:\abc\c\debug\C.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86

/ERRORREPORT:PROMPT asm.obj  kernel32.lib user32.lib gdi32.lib

winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib

oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
―――――――――――――――――――――― c 编译器设置
/Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D

"UNICODE" /Gm /EHsc /RTC1 /MDd /Yu"stdafx.h" /Fp"Debug\C.pch"

/Fo"Debug\\" /Fd"Debug\vc80.pdb" /W3 /nologo /c /Wp64 /ZI /TP

/errorReport:prompt
―――――――――――――――――――――― 以下的是汇编编译
C:\RadASM\Masm32\Bin\ML.EXE /c /coff /Cp /nologo

/I"C:\RadASM\Masm32\Include" "asm.asm"

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 237
活跃值: (20)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
在我看来,"跪求"这两个字挺让人反感的。
2006-10-30 10:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最初由 米老虎 发布
初学汇编,就遇到这个棘手问题,搞了两三天了,还是没有弄好,各位能

帮忙看看吗,我尽量把问题说清楚,可能有点?嗦,请不要见怪,呵呵。

――――――――――――――――――汇编部分
........


在.C文件里,你没有初始化数组,相当于声明了变量(不是定义),此时编译器知道它的类型,但不给它分配内存,
所以连接时找不到这个变量地址.

在.asm中也是找不到变量地址,你只声明,没有定义.
看下面代码:
.c文件:
#include <stdio.h>
extern int a;//声明
extern char str[];//声明
extern char* pchar = "haha";//定义
int main()
{
        int b= 0;
        printf("%s",pchar);
        return 0;
}
////////////////////////////////////////
.asm文件:
        .data
        .globl        _pchar//注意:只有pchar
        .align        2
        .type        _pchar,object
_pchar:
        .long        _$1
        .text
;    1 #include <stdio.h>
;    2 extern int a;
;    3 extern char str[];
;    4 extern char* pchar = "haha";
;    5 int main()
        .type        _main,function
_main:
        pushl        %ebp
        movl        %esp,%ebp
        pushl        %ecx
        movl        $1,%ecx
_$4:
        decl        %ecx
        movl        $0xfffa5a5a,(%esp,%ecx,4)
        jne        _$4
;    6 {
        .line        6
;    7         int b= 0;
        .line        7
        movl        $0,-4(%ebp)
;    8         printf("%s",pchar);
        .line        8
        pushl        _pchar//全局变量(_$1)
        pushl        $_$3
        call        _printf
        addl        $8,%esp
;    9         return 0;
        .line        9
        movl        $0,%eax
_$2:
;   10
;   11         }
        .line        11
        leave
        ret
_$5:
        .size        _main,_$5-_main
        .globl        _main
        .extern        _printf
        .data
_$3:
; "%s\x0"
        .byte        37,115,0
_$1:
; "haha\x0"
        .byte        104,97,104,97,0//全局
///////////////////////////////////////
关于定义与声明的详细区别参见<c/c++深层次探讨>
2006-10-30 22:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
呵呵,下次就不用跪求了,用超级感谢吧,主要是因为,编程有时候真的另人发疯,搞来搞去也解决不了,觉得能帮助解决困难的人就是神,所以才用跪,呵呵

谢谢你的帮忙,我再试一下
2006-10-31 21:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
你好,真的非常感谢你的帮助,我的问题终于搞定了,你说的c/c++深层次探讨是什么来的,是不是一本书还是一个论坛,呵呵请指教
2006-10-31 21:11
0
雪    币: 225
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
假设有一个的C++ Object SomeObj定义,经过编译後,其汇编结果是这样?

_SomeObj:
+00h -- ptr to its class Constructor
+04h -- ptr to its class Destructor
+08h -- other members and/or methods
+0Ch -- ............................
....................................
+XXh -- the very last members of this _SomeObj

我这样的理解对否?尤其是class Constructor,class Destructor 的位置?
恳请扫盲。。。谢谢。。。
2006-11-1 11:53
0
游客
登录 | 注册 方可回帖
返回
//