
逆向学习
文章平均质量分 69
W1nds
每天进步一点点。
展开
-
调用约定的参数传递顺序
都是学习过程中做的笔记。在编程的过程中,函数是必不可少的基础之一。c语言的程序完全由函数构成,所有的代码都在某一个函数中;pascal区分函数和过程,但是本质是类似的。而对计算机硬件而言CPU只关心一条条的指令,而不是它们是什么样的结构组织。call和ret只是为了函数调用的方便而已,并不是函数存在的证据。最简单的例子就是在木马免杀过程中call+ret和jmp是等价的。因此一种高级语言如何实现函数调用并不受约束,故出现了不同的函数调用规则。在windows平台上常用的函数调用方式有pascal方式(pss原创 2010-08-06 21:31:00 · 1611 阅读 · 0 评论 -
简单PEDIY----让程序运行时打开指定网站
思路:在一个正常合法的程序上附加一段代码(这里演示的是调用Winexec打开网页),通过修改原程序的入口点跳到我们加的那段代码上,执行完成我们的代码之后再跳回原来的入口处执行。步骤:1.查找源程序入口点2.搜索能写入代码的区域(或是自己添加区段)3.向程序中写入我原创 2011-08-30 19:15:24 · 1723 阅读 · 1 评论 -
多开限制突破
1.Findwindow突破 bp FindWindowW,运行程序断下来,执行到返回,来到下面004F0E5C 8BF4 mov esi,esp004F0E5E 68 B8466A00 push FindWind原创 2011-08-02 17:06:53 · 8146 阅读 · 3 评论 -
Switch语句的实现机制(2)
补充第三种,虽然我还是不很明白。。。=,=!(3)树型结构int main(){ int i=1; switch(i) { case 12:printf("%s","no1");break; case 21:printf("%s","no2");break; case 33:printf("%s","no3");break; case 4:printf("%s","no4");break; case 5:printf("%s","no5");break; case原创 2010-08-06 22:29:00 · 1728 阅读 · 1 评论 -
Switch语句的实现机制
<br />switch的底层实现机制根据switch需要判断的表达式的复杂性和不同编译器有所不同。一般情况下,switch有三种实现机制,分别是直接判断、跳转表和树型结构。编译器根据需要判断表达式的复杂性并采用相应的的实现方式。下面分别研究这三种switch机制<br /><br />(1)直接判断<br />int main(){ int i=1; switch(i) { case 1:printf("%s","no1");break; case 2:printf("%s","原创 2010-08-06 22:22:00 · 5411 阅读 · 0 评论 -
If条件分支语句的实现机制
<br />(1)<br />int main(){ int a=3,b=5; if (a<b) printf("%s","yes"); return 0;}<br />int a=3,b=5;00CE13BE mov dword ptr [a],3 00CE13C5 mov dword ptr [b],5 if (a<b) printf("%s","yes");00CE13CC mov eax,dword p原创 2010-08-06 22:11:00 · 2102 阅读 · 0 评论 -
结构体的实现机制
<br />在C语言中用结构体定义数据的顺序和它在内存中的数据布局是一致的。<br />#include <stdio.h>int main(){ int i; struct information { int cpu_num; char cpu_name[50]; unsigned long cpu_speed; int cpu_price; }Info[3]={ {1,"AMD 1.2G 1987",1200,120}, {2,"INT原创 2010-08-06 22:05:00 · 1501 阅读 · 1 评论 -
数组的实现机制
<br />分析个二维数组的程序<br />int main(){ int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int i,j; for (i=0;i<3;i++) for (j=0;j<4;j++) { a[i][j]*=2; printf("%d",a[i][j]); } return 0;}<br />反汇编代码如下:<br />int main(){00F913A0 pu原创 2010-08-06 21:50:00 · 2427 阅读 · 0 评论 -
字符串的实现机制
通常编译器编译一个引用字符串的指令是使用指针来实现的.字符”/0”表示字符转的结尾(这是C语言,Delphi是在字符串起始地址前添加了一个表示字符串实际长度的数值标值)char *a={“AAAA”};在内存中*a实际存放的数据是 41H 41H 41H 41H 00Hint main(){ char *a={"AAAA"}; char *b={"BBBB"}; printf("%s%s/n",a,b); return 0;}反汇编代码如下:int main(){01原创 2010-08-06 21:45:00 · 1101 阅读 · 0 评论 -
常量、指针和变量的实现机制
<br />无论是硬件设计还是软件设计,计算机领域都有一条设计法则-----那就是把不变化的和变化的东西分离出来,这样做的好处是稳定性提高了,而且方便维护。<br />按照一般的PE文件结构来说,常量存储在数据区块,变量存储在堆栈,一般程序的编译器也很乐意按照这种方式编译和生成PE文件。<br />在内存中,一般数据是从低地址往高地址存放,而在堆栈中数据是从内存高的地址往内存低的地址存放。<br />int a=3,*pa=&a;int main(){ int b=4; int *pb=&b原创 2010-08-06 21:39:00 · 1477 阅读 · 0 评论 -
微信聊天内容解密终于搞定了。。。
在某牛的帮助下,终于搞定了。。原创 2013-10-17 17:56:52 · 17956 阅读 · 10 评论