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