随笔分类 -  汇编语言与内核编程

C语言、汇编、内核编程
摘要:reference:http://www.aogosoft.com/downpage.asp?mode=viewtext&id=54由于汇编语言是与机器语言机器码一一对应的,所以程序的代码非常简洁,编译、链接程序不会在其中加入任何其它代码,所以,用Win32DASM等把汇编工具反汇编汇编语言写的程序,其列出的汇编代码几乎与编写的顺序、过程、代码一模一样,这也是汇编语言简洁的证据。 但是这种过于简洁的代码却给了破解者提供了方便,破解者只需要有一定的Windows SDK编程与汇编的经验,破解就非常简单,根本不需要用SoftICE这些动态工具就可以破解。于是,相应的防止跟踪的技术就出来了, 阅读全文
posted @ 2012-09-23 21:53 r3call 阅读(2518) 评论(1) 推荐(1) 编辑
摘要:这个是源代码: 1 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2 ; Sample code 阅读全文
posted @ 2012-09-13 21:54 r3call 阅读(838) 评论(0) 推荐(0) 编辑
摘要:首先先来看源程序: 1 .386 2 .model flat,stdcall 3 option casemap:none 4 5 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 6 ;包含的文件 7 ;>>>>>>>>>>& 阅读全文
posted @ 2012-09-12 21:05 r3call 阅读(1030) 评论(0) 推荐(0) 编辑
摘要:首先来看错误的写法 1 .386 2 .model flat,stdcall 3 option casemap:none 4 5 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g 阅读全文
posted @ 2012-09-12 16:13 r3call 阅读(1580) 评论(0) 推荐(0) 编辑
摘要:源程序: 1 .386 2 .model flat,stdcall 3 option casemap:none 4 5 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 阅读全文
posted @ 2012-09-12 14:09 r3call 阅读(694) 评论(1) 推荐(0) 编辑
摘要:1 .386 2 .model flat,stdcall 3 option casemap:none 4 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g 阅读全文
posted @ 2012-09-12 13:24 r3call 阅读(1041) 评论(0) 推荐(0) 编辑
摘要:默认情况下,输入中文会显示乱码,无论是注释还是字符串,我们修改下就可以了。选择字体,选择脚本。第一个程序: 1 .386 2 .model flat,stdcall 3 option casemap:none 4 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 阅读全文
posted @ 2012-09-11 20:41 r3call 阅读(2373) 评论(0) 推荐(0) 编辑
摘要:下面我们开始学习节表。不知道还记不记得在前面哪个结构体中出现过节的数量?嘿嘿,忘记了吧,我们翻开以前的记录,看看。原来是typedef struct IMAGE_NT_HEADERS { DWORD Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER32 OptionalHeader; }IMAGE_NT_HEADERS,*PIMAGE_NT_HEADERS; 中的typedef struct _IMAGE_FILE_HEADER { WORD ... 阅读全文
posted @ 2012-09-04 20:28 r3call 阅读(2915) 评论(0) 推荐(0) 编辑
摘要:上次我们学习了IMAGE_OPTIONAL_HEADER的前十个参数,下面我们继续学习。第十一个值SectionAlignment,表示节对齐粒度。这个值一定要大于或等于文件对齐粒度。The alignment of sections loaded in memory, in bytes. This value must be greater than or equal to the FileAlignment member.The default value is the page size for the system.原来是4096B,也就是4kb了。第十二个值是FileAlignmen 阅读全文
posted @ 2012-09-03 20:34 r3call 阅读(6236) 评论(0) 推荐(3) 编辑
摘要:在学习之前,我们来看看上次的进度以及对应的结构体typedef struct _IMAGE_OPTIONAL_HEADER { WORD Magic; BYTE MajorLinkerVersion; BYTE MinorLinkerVersion; DWORD SizeOfCode; DWORD SizeOfInitializedData; DWORD SizeOfUninitializedDat... 阅读全文
posted @ 2012-09-03 18:38 r3call 阅读(4714) 评论(0) 推荐(1) 编辑
摘要:一、PE文件结构PE即Portable Executable,是win32环境自身所带的执行体文件格式,其部分特性继承自Unix的COFF(Common Object File Format)文件格式。PE表示该文件格式是跨win32平台的,即使Windows运行在非Intel的CPU上,任何Win32平台的PE装载器也能识别和使用该文件格式的文件。所有Win32执行体(除了VxD和16位的DLL)都使用PE文件格式,如EXE文件、DLL文件等,包括NT的内核模式驱动程序(Kernel Mode Driver)。PE文件至少包含两个段,即数据段和代码段。Windows NT 的应用程序有9个预 阅读全文
posted @ 2012-09-01 19:42 r3call 阅读(16077) 评论(2) 推荐(7) 编辑
摘要:1 00411A20 push ebp 2 00411A21 mov ebp,esp 3 00411A23 sub esp,0E8h 4 00411A29 push ebx 5 00411A2A push esi 6 00411A2B push edi 7 00411A2C lea edi,[ebp-0E8h] 8 00411A32 mov ecx,3Ah 9 00411A37 mov eax,0CCCCCCCCh10 00411A3C rep stos dword ptr[edi]11 00411A... 阅读全文
posted @ 2012-04-30 17:30 r3call 阅读(305) 评论(0) 推荐(0) 编辑
摘要:... 1 #include "stdafx.h" 2 3 4 int _tmain(int argc, _TCHAR* argv[]) 5 { 6 004113B0 push ebp 7 004113B1 mov ebp,esp 8 004113B3 ... 阅读全文
posted @ 2012-04-30 17:12 r3call 阅读(237) 评论(0) 推荐(0) 编辑
摘要:1 int _tmain(int argc, _TCHAR* argv[]) 2 { 3 004113B0 push ebp 4 004113B1 mov ebp,esp 5 004113B3 sub esp,0CCh 6 004113B... 阅读全文
posted @ 2012-04-30 16:59 r3call 阅读(243) 评论(0) 推荐(0) 编辑
摘要:1 while(c,2 jge B3 (循环体)4 。。。5 jmp A6 B: (循环结束了)... 阅读全文
posted @ 2012-04-30 16:39 r3call 阅读(137) 评论(0) 推荐(0) 编辑
摘要:1 do{ 2 c=c+i; 3 00411A55 mov eax,dword ptr [c] 4 00411A58 add eax,dword ptr [i] 5 00411A5B mov dword ptr [c],eax 6 } while(c... 阅读全文
posted @ 2012-04-27 11:44 r3call 阅读(232) 评论(0) 推荐(0) 编辑
摘要:1 #include "stdafx.h" 2 3 4 5 int fun(int a,int b) 6 { 7 int c=a+b; 8 int i; 9 for(i=0;i, ;给循环变量赋初值 2 jmp B ... 阅读全文
posted @ 2012-04-26 20:23 r3call 阅读(701) 评论(0) 推荐(0) 编辑
摘要:在高级语言出现的早期,很可能根本就没有这个区别。高级语言被编译成可执行的机器代码,一种版本就足够了。但是人们发现那些可执行的机器码是可以被优化的。比如说已经定义了但没有使用的变量、根本不可能执行到的代码,完全可以去除。一些跳转来跳转去的复杂逻辑,可以用简单的跳转替代。一些多余指令才达到目的的情况,实际上用一条指令就足够了。连续不断的优化操作,是最终编译越来越简洁、高效。 但是这又出现了另一个问题。当bug发生时,开发者需要调试。然而经过优化的代码,常常看上去已经和原来的高级语言逻辑大相径庭(虽然它们之间的功能应该是等价的)。这样以来调试者就往往摸不着头脑。此时就希望编译器不要优化或者... 阅读全文
posted @ 2012-04-26 20:01 r3call 阅读(657) 评论(0) 推荐(0) 编辑
摘要:函数参数的传递规则函数传递的规则现在一般有两种,一种是WINAPI方式,也就是_stdcall还有一种是_cdecl方式_stdcall调用规则:(1)参数从右到左进入堆栈(2)被调用者在返回前自动清理堆栈_cdecl C方式调用规则:(1)参数从右到左进入堆栈(2)由调用者负责清理堆栈生成的程序代... 阅读全文
posted @ 2012-04-26 19:49 r3call 阅读(367) 评论(0) 推荐(0) 编辑
摘要:常用的汇编指令:push :把一个32位的操作数压入堆栈中。这个操作导致esp被减4.esp被形象地称为栈顶。我们认为顶部地址是地址小的区域,那么,压入堆栈的数据越多,这个堆栈也就越堆越高,esp也就越来越小。在32位平台上,esp每次减少4(字节)。pop :相反,esp被加4,一个数据出栈。po... 阅读全文
posted @ 2012-04-26 19:44 r3call 阅读(351) 评论(0) 推荐(0) 编辑