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

相关文章

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st