C语言如何执行buf中的代码

2024-03-23 18:32
文章标签 语言 代码 执行 buf

本文主要是介绍C语言如何执行buf中的代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

strcpy(szBuf, “stricmp(“1”,“2”);”);
这里的szBuf只是保存了字符串值而已,并不是可执行的代码,从代码到可执行的二进制指令需要编译,亦或者通过解释执行.需要调用C编译器或解释器.
若要直接执行Buffer里面的代码必须是二进制指令.
这里提供一种可直接执行题主给的stricmp的例子:
x86
char szBuf[] = “\x8b\x44\x24\x04\x8b\x5c\x24\x08\x0f\xbe\x08\x85\xc9\x74\x0f\x0f\xbe\x13\x85\xd2\x74\x08\x3b\xca\x75\x04\x40\x43\xeb\xea\x0f\xbe\x08\x0f\xbe\x13\x2b\xca\x8b\xc1\xc3”;
调用:
int(_stricmp)(char[], char[]) = (int()(char[], char[]))&szBuf;printf("%d",_stricmp(“str1”, “str2”));
前提是szBuf的内存为可执行,Windows下使用VirtualProtectEx修改,Linux下使用mmap修改该内存位置为可执行.
Windows下的例子:

#include <stdio.h>#include <Windows.h>char szBuf[] = “\x8b\x44\x24\x04\x8b\x5c\x24\x08\x0f\xbe\x08\x85\xc9\x74\x0f\x0f\xbe\x13\x85\xd2\x74\x08\x3b\xca\x75\x04\x40\x43\xeb\xea\x0f\xbe\x08\x0f\xbe\x13\x2b\xca\x8b\xc1\xc3”;
int main(){
int(_stricmp)(char[], char[]) = (int()(char[], char[]))&szBuf;

DWORD OldProtect;
VirtualProtectEx(GetCurrentProcess(), \&szBuf, sizeof(szBuf), \PAGE_EXECUTE_READWRITE, \&OldProtect);printf("%d",_stricmp("str1", "str2"));VirtualProtectEx(GetCurrentProcess(), \&szBuf, sizeof(szBuf), \OldProtect, \NULL);return 0;}

szBuf里的代码对应的汇编如下:

	mov eax, [esp+0x04]mov ebx, [esp+0x08]__loop :movsx ecx, byte ptr[eax]test ecx, ecxje __exitmovsx edx, byte ptr[ebx]test edx, edxje __exitcmp ecx, edxjne __exitinc eaxinc ebxjmp __loop__exit :movsx ecx, byte ptr [eax]movsx edx, byte ptr [ebx]sub ecx, edxmov eax, ecxret

not about
https://www.jianshu.com/p/511fcb035fcb

这篇关于C语言如何执行buf中的代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/839166

相关文章

Java进行日期解析与格式化的实现代码

《Java进行日期解析与格式化的实现代码》使用Java搭配ApacheCommonsLang3和Natty库,可以实现灵活高效的日期解析与格式化,本文将通过相关示例为大家讲讲具体的实践操作,需要的可以... 目录一、背景二、依赖介绍1. Apache Commons Lang32. Natty三、核心实现代

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

如何合理管控Java语言的异常

《如何合理管控Java语言的异常》:本文主要介绍如何合理管控Java语言的异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、Thorwable类3、Error4、Exception类4.1、检查异常4.2、运行时异常5、处理方式5.1. 捕获异常

MySQL中SQL的执行顺序详解

《MySQL中SQL的执行顺序详解》:本文主要介绍MySQL中SQL的执行顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql中SQL的执行顺序SQL执行顺序MySQL的执行顺序SELECT语句定义SELECT语句执行顺序总结MySQL中SQL的执行顺序

SpringBoot实现二维码生成的详细步骤与完整代码

《SpringBoot实现二维码生成的详细步骤与完整代码》如今,二维码的应用场景非常广泛,从支付到信息分享,二维码都扮演着重要角色,SpringBoot是一个非常流行的Java基于Spring框架的微... 目录一、环境搭建二、创建 Spring Boot 项目三、引入二维码生成依赖四、编写二维码生成代码五

C语言中的常见进制转换详解(从二进制到十六进制)

《C语言中的常见进制转换详解(从二进制到十六进制)》进制转换是计算机编程中的一个常见任务,特别是在处理低级别的数据操作时,C语言作为一门底层编程语言,在进制转换方面提供了灵活的操作方式,今天,我们将深... 目录1、进制基础2、C语言中的进制转换2.1 从十进制转换为其他进制十进制转二进制十进制转八进制十进

$在R语言中的作用示例小结

《$在R语言中的作用示例小结》在R语言中,$是一个非常重要的操作符,主要用于访问对象的成员或组件,它的用途非常广泛,不仅限于数据框(dataframe),还可以用于列表(list)、环境(enviro... 目录1. 访问数据框(data frame)中的列2. 访问列表(list)中的元素3. 访问jav

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与