当前位置: 代码迷 >> 汇编语言 >> c++到汇编再到VC++中执行,该如何解决
  详细解决方案

c++到汇编再到VC++中执行,该如何解决

热度:6088   发布时间:2013-02-26 00:00:00.0
c++到汇编再到VC++中执行
vc++下如下简单代码:
#include   "stdio.h "
void   main()
{
printf( "hello,world\n ");
}

生成的汇编代码如下:
TITLE D:\PVC\汇编\huibian.cpp
.386P
include   listing.inc
if   @Version   gt   510
.model   FLAT
else
_TEXT SEGMENT   PARA   USE32   PUBLIC   'CODE '
_TEXT ENDS
_DATA SEGMENT   DWORD   USE32   PUBLIC   'DATA '
_DATA ENDS
CONST SEGMENT   DWORD   USE32   PUBLIC   'CONST '
CONST ENDS
_BSS SEGMENT   DWORD   USE32   PUBLIC   'BSS '
_BSS ENDS
_TLS SEGMENT   DWORD   USE32   PUBLIC   'TLS '
_TLS ENDS
; COMDAT   ??_C@_0N@OAGM@hello?0world?6?$AA@
_DATA SEGMENT   DWORD   USE32   PUBLIC   'DATA '
_DATA ENDS
; COMDAT   _main
_TEXT SEGMENT   PARA   USE32   PUBLIC   'CODE '
_TEXT ENDS
FLAT GROUP   _DATA,   CONST,   _BSS
ASSUME CS:   FLAT,   DS:   FLAT,   SS:   FLAT
endif
PUBLIC _main
PUBLIC ??_C@_0N@OAGM@hello?0world?6?$AA@ ;   `string '
EXTRN _printf:NEAR
; COMDAT   ??_C@_0N@OAGM@hello?0world?6?$AA@
;   File   D:\PVC\汇编\huibian.cpp
_DATA SEGMENT
??_C@_0N@OAGM@hello?0world?6?$AA@   DB   'hello,world ',   0aH,   00H   ;   `string '
_DATA ENDS
; COMDAT   _main
_TEXT SEGMENT
_main PROC   NEAR ;   COMDAT
;   File   D:\PVC\汇编\huibian.cpp
;   Line   4
push OFFSET   FLAT:??_C@_0N@OAGM@hello?0world?6?$AA@   ;   `string '
call _printf
pop ecx
;   Line   5
ret 0
_main ENDP
_TEXT ENDS
END

请问各位大侠,怎样使得上面的汇编代码能够重新在VC中运行??
谢谢!!!

------解决方案--------------------------------------------------------
下面是我从VC6.0中弄到的源代码和汇编代码:

C语言源代码:

#include "stdafx.h "

int main(int argc, char* argv[])
{
printf( "Hello World!\n ");
return 0;
}

汇编窗口中输入的汇编代码:

--- C:\MyProjects\hello\hello.cpp ------------------------------------------------
1: // hello.cpp : Defines the entry point for the console application.
2: //
3:
4: #include "stdafx.h "
5:
6: int main(int argc, char* argv[])
7: {
00401010 push ebp
00401011 mov ebp,esp
00401013 sub esp,40h
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-40h]
0040101C mov ecx,10h
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
8: printf( "Hello World!\n ");
00401028 push offset string "Hello World!\n " (0042201c)
0040102D call printf (00401060)
00401032 add esp,4
9: return 0;
00401035 xor eax,eax
10: }
00401037 pop edi
00401038 pop esi
00401039 pop ebx
0040103A add esp,40h
0040103D cmp ebp,esp
0040103F call __chkesp (004010e0)
00401044 mov esp,ebp
00401046 pop ebp
00401047 ret

怎么跟你弄到的差距这么大呢,你用的哪个编译器?
你弄到的汇编代码到处是标号,没有几句像样的汇编指令。好像还不是底层的汇编代码。
真正的汇编指令也只有下面的几条而已。
push OFFSET FLAT:??_C@_0N@OAGM@hello?0world?6?$AA@ ; `string '
call _printf
pop ecx
ret 0
  相关解决方案