能力值:
( LV2,RANK:10 )
|
-
-
2 楼
你没有在主函数中执行
|
能力值:
( LV9,RANK:170 )
|
-
-
3 楼
io,堆这些好像也还没有初始化吧.
你先调用mainCRTStartup
在mainCRTStartup函数里面会调用main函数的,所以你在mainCRTStartup前面把main那里的代码给改了,跳到你的printf那里去.
因为要改代码,才要加 #pragma comment(linker, "/SECTION:.text,REW" )的
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
前辈写的
//hello.c by MentalDease
#include "stdafx.h"
#include "stdio.h"
void print()
{
#pragma comment(linker, "/entry:print")
#pragma comment(linker, "/SECTION:.text,REW" )
int mainCRTStartup();
void main();
__asm
{
MOV EAX, OFFSET main
MOV BYTE PTR[EAX], 0xB8 //MOV EAX, 0x
MOV DWORD PTR[EAX+1], OFFSET SHOWSTRING
MOV WORD PTR[EAX+5], 0xE0FF // JMP EAX
}
mainCRTStartup();
SHOWSTRING:
printf ("i am MentalDease\n");
getchar();
}
void main()
{
}
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
#include <stdio.h>
void print()
{
#pragma comment(linker, "/entry:print")
#pragma comment(linker, "/SECTION:.text,REW" )
printf("hello world ");
}
void main()
{
printf();
}
你虽然封装了printf()函数,但是你没有调用,应该在主函数中调用,才能执行printf()函数中的代码!
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
main函数中没有调用print()
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
楼主你不说清楚,看,楼上二位理解错了不是
不过你把
#pragma comment(linker, "/SECTION:.text,REW" )
改成
#pragma comment(lib, "msvcrt.lib" )
貌似应该可以
|
能力值:
( LV2,RANK:15 )
|
-
-
8 楼
新手测试 2008编译器效果,这么写就可以:
#include <stdio.h>
void print()
{
#pragma comment(linker, "/entry:print")
printf("hello world ");
}
void main()
{
}
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
后患无穷吧
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
顶一下····支持下楼主!···········
|
能力值:
( LV9,RANK:170 )
|
-
-
11 楼
//hello.c by MentalDease #include "stdafx.h" #include "stdio.h"
void print() { // 更改入点函数,改成print #pragma comment(linker, "/entry:print") // 因为后面有修改main函数,代码是在.text节中,没有写的属性,所以修改一下.text节的属性 #pragma comment(linker, "/SECTION:.text,REW" ) // 向前申明这二个函数 int mainCRTStartup(); void main();
// 这段的作用是将main偏移处的代码改成jmp到SHOWSTRING处 // 因为mainCRTStartup里面会调用main函数,除了调用main函数,还会有一些别的操作 // 比如获取命令行参数,初始化io之类的,而main函数是在倒数第二个调用的 // 关于这部份,大家可以看下,crt0.c代码内容解释和编译器构造 // http://www.cnblogs.com/shanzy/articles/513436.html __asm { MOV EAX, OFFSET main MOV BYTE PTR[EAX], 0xB8 //MOV EAX, 0x MOV DWORD PTR[EAX+1], OFFSET SHOWSTRING MOV WORD PTR[EAX+5], 0xE0FF // JMP EAX }
mainCRTStartup();
SHOWSTRING: printf ("i am MentalDease\n"); getchar(); }
void main() { }
.................
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
这段代码本来就可以打印出Hello World来呀,另外
void main()
{
}
用着多余也可以删了
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
毛主席说过 没有调查就没有发言权 没有真实的调查同样没有发言权
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
VC6下通过,编译选项/MD(release版)或/MDd(debug版)
#include <stdio.h>
#pragma comment(linker, "/ENTRY:func")
void func()
{
printf("Hello!\n");
}
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
小菜的我不知道C语言里有#pragma comment(linker, "/ENTRY:func")
不过看着好像是linker连接func这个东东!唉!加强学习!
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
你可以装个msdn,上面有很祥细的帮助的
还不结贴呀!
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
这位老兄的是正解,你根本没在主程序中调用print(),当然没显示了
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
顶一下····支持下楼主!···········
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
已经把程序的入口函数改了啊 应该可以成功的
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
Me TOO!!!!!!!!!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
是要加入#pragma comment(lib, "msvcrt.lib"),msvcrt定义了Printf、puts等基本函数,才能正确输出。
|
|
|