• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C语言内嵌汇编API内存搜索引擎实例

C语言内嵌汇编API内存搜索引擎实例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c语言调用api,c语言api,c语言中文api,c语言api函数大全,c语言调用api函数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了C语言内嵌汇编API内存搜索引擎的方法,分享给大家供大家参考。具体实现方法如下:

// 
 
#include "stdafx.h" 
#include <Windows.h> 
 
 DWORD __stdcall GetStrLengthA(char* szName) 
{ 
    _asm 
    { 
        push edi 
        push ebx 
        mov eax,  szName 
        mov edi, eax 
        mov ebx, eax 
        xor al, al 
 
lstrscan: 
        scas byte ptr [edi]          //字符扫描法检查字符串指针长度  
        jnz lstrscan 
        dec edi 
        sub edi, ebx 
        mov eax, edi 
        pop ebx 
        pop edi 
         
    } 
} 
 
 DWORD __stdcall CalcBufferCRC(char* lpBuffer) 
{ 
    _asm 
    { 
        push ebx 
        push edi 
        push ecx 
        push ebp 
        mov ebx, lpBuffer 
        push ebx 
        call GetStrLengthA 
        mov edi, eax 
        shr edi, 2 
        xor ecx, ecx 
loopBegin: 
        dec edi 
        jl loopOver 
        xor ecx, dword ptr [ebx] 
        add ebx, 4 
        jmp loopBegin 
loopOver: 
        mov eax, ecx 
        pop ebp 
        pop ecx 
        pop edi 
        pop ebx 
    } 
} 
 
DWORD __stdcall GetProcAddressA(HANDLE hModule, DWORD dwExportCRC) 
{ 
    //DWORD lpProcNameCRC = ; 
    DWORD dwProcNumber; 
    LPVOID pProcAddress, pProcNameAddress, pProcIndexAddress; 
    _asm 
    { 
        push ebx 
        push esi 
         
        mov eax, hModule 
        mov edx,dwExportCRC      // edx=函数名CRC32 
        mov ebx, eax                // ebx=基址 
        mov eax, [ebx+0x3c]          // eax=文件头偏移 
        mov esi, [ebx+eax+0x78]      // esi=输出表偏移,文件头+可选头的长度=$78 
        lea esi, [ebx+esi+0x18]      // esi=函数名数量 = 函数数量 [ebx+esi+$14] 
        lods dword ptr ds:[esi] 
        mov dwProcNumber, eax       // eax=函数名数量 
        lods dword ptr ds:[esi] 
        mov pProcAddress, eax       // eax=函数偏移量 
        lods dword ptr ds:[esi] 
        mov pProcNameAddress, eax   // eax=函数名偏移量 
        lods dword ptr ds:[esi] 
        mov pProcIndexAddress, eax  // eax=序列号偏移量 
        mov edx, dwProcNumber       // edx=遍历次数 
LoopBegin: 
        xor eax, eax                // Result = 0 
        dec edx 
        jl LoopEnd 
        mov eax, pProcNameAddress 
        add eax, ebx                // eax=函数名基地址 
        mov eax, dword ptr ds:[eax+edx*4] 
        add eax, ebx                // eax=遍历函数名 
        push eax 
        call CalcBufferCRC 
        cmp eax, dwExportCRC      // 对比CRC32 
        jnz LoopBegin 
        shl edx, 1 
        add edx, pProcIndexAddress  // 函数基序列 
        movzx eax, word ptr ss:[edx+ebx] 
        shl eax, 2 
        add eax, pProcAddress       // 函数基地址 
        mov eax, [eax+ebx] 
        add eax, ebx                // Result = 函数地址 
LoopEnd: 
        pop esi 
        pop ebx 
         
    } 
}&

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C语言内嵌汇编API内存搜索引擎实例

相关文章

  • 2017-05-28C/C++中获取数组长度的方法示例
  • 2017-05-28C语言完美实现动态数组代码分享
  • 2017-05-28浅谈c++中的while(cin)问题
  • 2017-05-28关于C++中定义比较函数的三种方法小结
  • 2017-05-28举例讲解C语言程序中对二叉树数据结构的各种遍历方式
  • 2017-05-28C++基础入门教程(三):数组、字符串、结构体、共用体
  • 2017-05-28数据结构之AVL树详解
  • 2017-05-28VC++中图像处理类CBitmap的用法
  • 2017-05-28C++中的常对象与常对象成员详解
  • 2017-05-28C++ decltype类型说明符

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • c++ map,mutimap删除问题分析
    • 纯c语言实现面向对象分析与示例分享
    • 浅析C++的特殊工具与技术
    • C语言+win32api写窗体应用程序
    • Linux中使用C语言实现基于UDP协议的Socket通信示例
    • C++程序设计-五子棋
    • VC6.0常用快捷键大全
    • linux系统中c++写日志文件功能分享
    • 由static_cast和dynamic_cast到C++对象占用内存的全面分析
    • C++ boost::asio编程-域名解析详细介绍

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有