易截截图软件、单文件、免安装、纯绿色、仅160KB

求教C这段语言代码作用

DWORD dwMagic;
DWORD i;
BYTE dwCode;
DWORD dwAddr;

dwStartMap = SH->VirtualAddress + (DWORD)MapOfFile;//段现在首地址
dwEndMap  = SH->Misc.VirtualSize + dwStartMap;//段现在末地址
i = 0;
for (dwMagic=1; dwMagic <0xFF; dwMagic++)
{
if (i == dwEndMap)
    break ;
for (i=dwStartMap; i <dwEndMap; i++)
    {
dwCode = *(LPBYTE)i;
if (dwCode == 0xE8 || dwCode == 0xE9)//call或jmp
{
    dwAddr = i + 5 + *(LPDWORD)(i+1);//跳转的目的地址
    if (dwAddr>dwStartMap && dwAddr <dwEndMap)
continue ; //段内转移
    dwCode = *(LPBYTE)(i+1);//段间转移,*(LPBYTE)(i+1)是偏移量的低字节吧,保存到dwCode有什么用?什么逻辑?
    if (dwCode == dwMagic)
break ;  //为什么这样做,偏移量的低字节为循环的dwMagic的概率很小啊,而且比较类型也不一致
}
      }
}//这个两层for完了,没有做任何操作,唯有dwAddr保存了最后个call或jmp的跳转地址,dwCode恰好是dwMagic的值-可能性很小
DWORD dwMagic;
DWORD i;
BYTE dwCode;
DWORD dwAddr;
dwStartMap = SH->VirtualAddress + (DWORD)MapOfFile;//段现在首地址
dwEndMap  = SH->Misc.VirtualSize + dwStartMap;//段现在末地址
i = 0;
for (dwMagic=1; dwMagic <0xFF; dwMagic++)
{
if (i == dwEndMap)
break ;


相关问答:

两个C文件的问题

以前在VC里面建一个工程,都只用一个 .c 文件,昨天在一个工程里用了两个 .c文件了,遇到问题了,请大家指点。比如:
File1.c Fil ......

C中内存的分配

比如:
char c[] = "hello,world";
char *c = "hello,world";

在分配内存时是不一样的吧?(分配到堆还是栈什么的)
谁能给讲讲C中内存是怎么分配的啊?
或者给提供个链接 ......

文件读写问题 c高手请进

下面是我的代码 从内存写入文件正确 但从文件读入内存都是乱码 而且程序崩溃 请c高手指点
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct inf
{
  & ......

单链表问题 c高手请进

编写一个程序用链表实现:将一个升序整数数列的重复数据去掉
编好后,结果不对啊,求助c高手
#include <stdio.h>
#include <stdlib.h>
struct link
{
  int number;
  s ......

C/C++程序设计教程; 作者:苏长龄 黄岚 主编

如题,这书怎样,知道的说下,谢谢。
没听说过

同问,同问

我也没听说过

  我只在网上下载过这本书的课后题。
 
  实话说,课后题还蛮有水平的。

  据此估计,这本 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号