main的执行

1 入门

1.每个程序都从main()函数开始,所以我们先了解一下main()

好的,让我们先写一个世界上最出名的程序:

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

不错!很好的开始!然后用VS2008以Debug方式编译下,再用OllyDbg打开看看:

00411078 >JMP Test_0.004117B0
0041107D JMP Test_0.00412CC0
00411082 JMP <JMP.&MSVCR90D._lock>
00411087 JMP <JMP.&KERNEL32.GetProcAddress>
0041108C JMP Test_0.00411440
00411091 JMP Test_0.00413310
00411096 JMP <JMP.&MSVCR90D.?terminate@@YAXXZ>
0041109B JMP <JMP.&MSVCR90D._exit>
004110A0 JMP <JMP.&KERNEL32.GetCurrentThreadId>
004110A5 JMP <JMP.&MSVCR90D._initterm>

我们都知道其实编译器在编译我们的程序前会做很多准备工作,而这些准备工作由于涉及的东西较多且每个由此编译器生成的程序都一样,因此我们不必深究,只需快速且准确的找到main函数即可。
但是这对于初学逆向的朋友来说也是最难的,下面我就教各位读者怎样突破这个障碍。
想要找到main函数,那么我们就要从C语言本身讲起,在刚刚开始学习C语言的时候我们就被不幸的告知,我们的程序中必须要包含一个名字叫做main的函数,不管你多讨厌它都必须如此,后来便成了习惯……
后来查查C99标准,发现int main(int argc, char *argv[])”与“int main(void)” 是被接受的,然后又查查MSDN,可以清晰看到一句话“The main and main functions can take the following three optional arguments”,也就是告诉了我们main函数其实是有3个参数的,其后面的例子更是证明了这句话确实是微软写上去的:

main( int argc, char *argv[ ], char *envp[ ] )      

 

2.在c语言中,变量都要先声明在使用。

int a;

a=10;

在声明时要定义它的存储类型,那它的类型有char =1,  short=2  ,long=4  ,double=8   .long long=8  , long double=12   ,int=4.

注意指针变量:char*p1;的内存大小于硬件有关,十六位的机子是它占2个,32位的占4字节。

2)函数结构:顺序,选择,循环三种。

1.选择结构:if     else   elseif   switch   case   break   default

2,循环结构:for   while  do.......while;


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值