先给你出道题目:在标注的地方写入代码,执行程序后输出hello word !,你能么?
#include "stdio.h"
void print()
{
//只能在此处写入代码
}
void main()
{
//这里什么也别写哦
}
怎么样?想出来没?
算了还是给你答案吧:
#include "stdio.h"
extern "C" int __cdecl mainCRTStartup(void); //注意:若源文件是.c结尾的话,不需要这一句
void print()
{
#pragma comment(linker, "/entry:print")
#pragma comment(linker, "/SECTION:.text,ERW")
#pragma comment(lib, "msvcrt.lib")
int mainCRTStartup();
void main();
__asm
{
MOV EAX, OFFSET main //得到main函数的地址
MOV BYTE PTR[EAX], 0xB8 //MOV EAX //写入MOV EAX指令
MOV DWORD PTR[EAX+1], OFFSET SHOWSTRING //将printf语句地址放在eax+1(MOV EAX 的后面)处
MOV WORD PTR[EAX+5], 0xE0FF // JMP EAX:FFE0 //写入JMP EAX指令
}
mainCRTStartup();
__asm
{
leave
ret
}
SHOWSTRING:
printf("hello,world!\n");
__asm
{
xor eax,eax
ret
}
}
void main()
{
}