在高级语言中隐藏Call指令

深入理解x86汇编中的CALL与RET指令 在计算机体系结构中,函数调用是程序执行流控制的基础机制。x86架构通过CALL和RET指令对实现子程序调用,其核心原理涉及堆栈操作与指令指针管理。CALL指令将返回地址压栈并跳转,RET则从堆栈恢复执行流。这种机制支撑了现代编程中的模块化设计,在操作系统内核、编译器优化等领域有广泛应用。特别是在性能敏感场景如嵌入式开发中,理解调用约定、堆栈平衡等细节至关重要。通过分析直接调用、间接调用等不同模式,开发者可以优化函数指针使用、实现尾递归等高级技巧。同时需要注意跨平台差异,如x86与x86-64在寄存器传参方面 阅读详情
今天写壳的时候想到了一种不需要手动修改直接编译就隐藏了call指令的方法,和大家一起分享。先还是说说手动隐藏call的简单方法。(我习惯用Delphi所以文中是delphi代码)
我在网吧,电脑没有带出来,所以即想即写,有什么错误的地方还望指出来。
手动隐藏方法:
比如我们定义这样的一个过程。
procedure test;
begin
end;
然后在另外一个过程中调用,
begin
   test;
end;
一般编译后我们就会看到相应的
00000001 call XXXXXXXX (00000001和XXXXXXXX都是假设的地址)
我们最常用的隐藏方法就是把代码写成这样
begin
   test;
   asm DB $90,$90,$90,$90,$90,$90 end;
end;
我们需要利用6个nop来为以后的隐藏做准备。
然后等编译后会出现这样的代码
00000001 call XXXXXXXX
00000006 nop
00000007 nop
00000008 nop
00000009 nop
00000010 nop
00000011 nop

然后我们手工需要做的是修改这段代码成如下
00000001 push 00000012
00000006 push XXXXXXXX
00000011 ret
这样代码长度刚好一样
这样就达到了隐藏效果,但是这样每次都要手工修改麻烦,下面看另外一种隐藏方法

自动隐藏:
在上面我们看到了手动隐藏的方法,下面来看自动隐藏方法,同样以test过程为例。
我们都知道这样的一种获取eip的方法
00000001 call 00000006
00000006 pop eax
在看看这段代码的机器码
00000001 FF00000000
00000006 58
{机器吗可能有错误记性不好}
那么我们定义两个变量
var
  TestEip:cardinal;
  TestPoi:pointer;
先不要问用来做什么,马上就清楚拉。
我们现在把调用代码改以下
begin
  Asm
    DB $FF,$00,$00,$00,$00,$58;
    Add Eax,$20;{这里要看,这个$20是这段代码的大小,反正要让Eax刚好只向Ret后一句的地址}
    mov TestEip,eax;
  end;
  TestPoi:=@Test;
  asm 
    Push TestEip;
    Push TestPoi;
    ret
  end;
然后编译,怎么样?call指令是不是不见了?
但是这样有一个麻烦,那就是万一Test带参数怎么办?
比如:
procedure test(a,b,c:cardinal);
begin
end;
那么我们也可以这样调用

begin
  Asm
    DB $FF,$00,$00,$00,$00,$58;
    Add Eax,$2F;{这里要看,这个$20是这段代码的大小,反正要让Eax刚好只向Ret后一句的地址}
    mov TestEip,eax;
    mov eax,参数1;
    mov ecx,参数2;
    mov edx,参数3;
  end;
  TestPoi:=@Test;
  asm
    mov eax,testeip; 
    Push TestEip;
    Push TestPoi;
    ret
  end;

LLVM IR 指令速查与实战:在编译器实验中搞定 add, call, icmp 和 br 本文深入解析LLVM IR指令的核心概念与实战应用,涵盖add、call、icmp和br等关键指令的使用方法。通过详细的代码示例和转换策略,帮助开发者掌握从AST到LLVM IR的编译过程,提升编译器实验中的中间代码生成能力。文章特别强调LLVM IR的SSA形式和类型系统设计,为编译原理学习者提供实用指南。 阅读详情

相关推荐

Android VMP加固逆向实战:从虚拟机指令还原到高级语言逻辑

虚拟机保护(VMP)是一种高级代码混淆技术,其核心原理是将原始代码编译为自定义字节码,通过内置解释器在运行时动态执行,从而对抗静态分析。这项技术的价值在于为关键算法、授权验证等核心逻辑提供深度保护,广泛应用于金融支付、游戏反外挂等高安全需求场景。理解VMP需要掌握解释器主循环、指令分发表和虚拟机上下文等关键组件,通过动静结合的分析方法,可以逐步还原自定义指令集语义。本文以Android平台为例,详细拆解了VMP加固样本的分析流程,涵盖从定位VMP引擎入口、逆向虚拟机结构体到最终将字节码提升为高级语言伪代码的

chengyixian7877的博客 471

访外.挂之无参数Call的远程调用...

本文章中的示例程序下载地址: CallTest.zip http://download.youkuaiyun.com/download/friendan/4367002 RemoteCall.zip http://download.youkuaiyun.com/download/friendan/4367006 本程序完整源码下载地址: http://download.youkuaiyun.com/down...

weixin_34284188的博客 408

汇编语言里的“模块化”:从DOS子程序到理解CALL/RET、栈与参数传递的底层逻辑

本文深入探讨汇编语言中的模块化编程,从DOS子程序出发,详细解析CALL/RET指令、栈操作及参数传递的底层机制。通过Debug工具演示和代码实例,揭示处理器如何实现代码复用和逻辑封装,并对比寄存器与栈传递参数的优缺点,帮助开发者理解汇编到高级语言的编译过程。

weixin_30480075的博客 353

C语言 游戏远程call调用,游戏函数调用及内嵌CALL细节须知

在针对游戏制作一些辅助工具时,除了修改游戏数据外,很多情况是直接通过call游戏函数来实现对应功能,例如频道喊话、打坐修炼等功能。那么如何做到正确的游戏函数调用呢?我认为应该从参数确定、堆栈平衡、上下文环境保护、函数返回值等几个方面来考虑。1、参数确定参数确定一般需考虑参数个数、否有寄存器传值、是否有this指针以及是否其他隐含信息等几个方面。我们现在对这几个方面逐一讲解。1)、参数个数方法一:函...

weixin_42239175的博客 1785

汇编语言中的ret指令:从入门到精通,手把手教你理解函数返回机制

本文深入解析汇编语言中ret指令的核心机制与函数返回原理。从堆栈操作基础讲起,通过等效指令解剖ret的底层行为,并结合调试器实战演示,手把手教你理解函数调用与返回的全过程。掌握ret指令是调试堆栈相关问题和深入理解计算机体系结构的关键,文章还探讨了常见陷阱与不同架构的差异。

weixin_28285943的博客 244

深入解析x86指令编码:从机器码到CPU执行的核心原理

在计算机体系结构中,指令编码是将高级语言转换为处理器可执行二进制代码的关键环节。其核心原理在于通过一套结构化的编码规则,将操作类型、操作数寻址模式等信息映射为机器码,从而实现程序的高效执行。这项技术的价值在于,它不仅是编译器后端和汇编器的基础,更是进行底层性能分析、手动优化关键循环、以及二进制安全分析(如漏洞挖掘和逆向工程)的必备技能。理解指令编码,能让开发者从CPU的视角审视代码,在性能调优和系统级编程中实现精准控制。本文以x86架构为例,详细拆解了其指令编码的“信封”结构,包括操作码、ModR/M、SI

weixin_29164185的博客 298

js中标签的显示与隐藏操作hide&show

某些文字和kongija     pageEncoding="utf-8"%> 显示隐藏标签 function popDIV(id){ if("none"==$("#"+id).css("display")) {  $("#"+id).show("slow",function(){ alert("暂时没有音乐哦");//如果您希望在一个涉及

running 1万+

CTF逆向工程:花指令原理、识别与去除实战指南

在软件安全分析和逆向工程领域,代码混淆是常见的保护技术,旨在增加分析难度。花指令作为其中一种基础而有效的手段,其核心原理在于利用反汇编工具的静态分析缺陷。反汇编器通常采用线性扫描或递归下降算法解析机器码,而花指令通过插入无效字节、构造必然跳转或破坏控制流,诱导工具错误识别指令边界,导致反汇编结果混乱。这种技术不改变程序实际功能,却能显著阻碍静态分析,在CTF竞赛、软件保护和恶意软件分析中具有重要价值。掌握识别与去除花指令的方法,例如通过分析标志位判断跳转、区分代码与数据区域,并借助IDA Pro、动态调试等

weixin_33924220的博客 578

远程注入代码,远程调用Call

1、远程注入代码,调用打坐CALL      HANDLE CreateRemoteThread(  HANDLE hProcess,        // 在指定的进程句柄里创建线程  LPSECURITY_ATTRIBUTES lpThreadAttributes,  //安全结构指针 nil  DWORD dwStackSize,      // 初始创建线程堆栈大小0  LPT

crkres9527 9056

Android逆向分析:动态Hook与虚拟机指令集解析实战

在移动安全领域,动态插桩技术是分析加密算法和混淆逻辑的核心手段。其原理是通过运行时注入代码,拦截和修改程序执行流程,从而绕过反调试机制、获取关键数据。这项技术的工程价值在于能够穿透层层保护,直接观测到程序的实际行为,尤其适用于分析那些静态分析难以破解的虚拟机和自定义指令集。在Android应用安全评估、风控机制研究和恶意软件分析等场景中,动态Hook结合虚拟机指令解析,已成为解密Google Play服务(GMS)中DroidGuard等安全组件内部逻辑的标准方法。通过Frida等工具进行动态行为观测,并深

weixin_30920513的博客 433

疾病负担研究(GBD)——如何使用joinpoint软件计算AAPC

疾病负担研究(GBD)——如何使用joinpoint软件计算AAPC

weixin_44240228的博客 1万+

计算机基础--硬件提供基础指令,程序通过组合这些指令来调度硬件行为

硬件是“执行者”:提供原子级的基础指令(如加法、跳转),是程序功能的物理载体。程序是“设计者”:通过逻辑组合(顺序、条件、循环)将基础指令编排成复杂流程,定义硬件的行为。层次抽象简化调度:从机器码到高级语言,每一层抽象都隐藏了底层硬件细节,但最终都需映射到硬件指令的组合。这种“硬件提供基础能力,程序组合指令实现功能”的模式,正是计算机系统“灵活性”和“通用性”的根本来源——同一硬件通过运行不同程序(指令组合),可以实现计算器、浏览器、游戏等千差万别的功能。

2401_88846919的博客 777

电池保护板为什么采用NTC热敏电阻而不是PTC热敏电阻?

R25=10K,即环境温度25°时,阻值是10K),温度变化1°C,阻值相应地明显变化,温度响应很灵敏,也就能精准地反向换算出阻值对应的温度。另外,还有功率型NTC热敏电阻,其主要用在开关电源设计中,串联在市电输入上,抑制浪涌电流。电池保护板上的NTC热敏电阻(NTC一端接地,另一端接电池充电控制IC管脚),在电池温度上升时,NTC热敏电阻温度也会随之上升,从而NTC电阻值会下降,因此电池充电控制IC用ADC检测的电压值就降低,当检测到的电压值达到下限阈值时,电池充电控制IC就会停止对电池的充电或放电。

电子绿洲的博客 5626

探索CPU的黑盒子:解密指令执行的秘密

在本章中,我们继续深入探讨了CPU如何执行指令的相关知识。首先,我们了解了CPU是由一系列寄存器组成的,包括PC寄存器、指令寄存器和条件码寄存器等。然后,我们讨论了程序计数器的作用,它控制着程序的执行流程,并且在条件分支和循环中起到关键作用。接着,我们介绍了函数调用机制,包括call和return指令的使用,以及如何正确地跳转和返回。最后,我们了解了CPU指令执行过程的五个阶段:取指令、指令译码、执行指令、访存取数和结果写回。通过优化这些阶段的执行过程,可以提高计算机的性能和效率。

努力的小雨,一个阳光向上的博客不仅仅给你知识更希望带给你快乐 1010

DeepSeek 框架和技术栈分析

DeepSeek 诞生于对更高效、更强大的深度学习计算和模型训练的追求。随着深度学习模型的规模不断增大,如大型语言模型(LLMs)和复杂的视觉模型,传统的框架在处理这些大规模模型时面临着性能瓶颈和资源利用效率低下的问题。DeepSeek 旨在解决这些问题,通过优化框架设计和采用先进的技术栈,实现更高效的模型训练和推理,同时降低计算成本。

yournameplease的专栏 1510

R 绘制环形树状图

按大类小类的从属关系绘制环形图,并把不同值的节点设置为相应大小。要求同一类的节点应为同一颜色。 按照输入,处理代码和输出记录

weixin_43718786的博客 1872

从堆栈操作到现代函数调用:8086指令如何塑造编程范式

本文探讨了8086处理器的堆栈操作指令(PUSH/POP)如何成为现代编程范式的硬件基石。这些指令奠定了函数调用、局部变量管理和递归实现的底层机制,通过分析8086 CPU的指令系统,揭示了硬件设计对高级编程抽象的深远影响及其在当代软件开发中的持续价值。

code8的博客 160

LeRobot 入门教程(三)在仿真环境和自定义机器人上部署 LeRobot

本教程详细介绍了基于真实世界机器人和仿真环境的模仿学习实现方法,涵盖数据采集、训练策略和评估全流程。在真实机器人部分,重点讲解了远程操作设置、摄像头配置、数据集记录与管理技巧、策略训练(支持GPU/MPS设备)以及模型评估。仿真环境部分则演示了gym-hil的安装使用、模拟数据采集和策略训练。此外,教程还提供了自定义机器人集成指南,包括电机选择、接口继承、传感器/动作特征定义、连接管理和校准配置等核心步骤。所有方法均支持HuggingFace数据集中心和Weights & Biases工具链,为机器

2506_90492529的博客 2399

操作系统4-中断、异常和系统调用(2)

系统调用的概念和实现 系统调用 (1)操作系统服务的编程接口 (2)通常由高级语言编写(C或者C++) (3)程序访问通常是通过高层次的API接口(函数库的库函数)而不是直接进行系统调用 (4)三种最常用的应用程序编程接口(API) Win32 API 用于Windows POSIX API 用于POSIX-based systems(包括UN...

weixin_42596333的博客 154

欺诈文本分类微调(一):基座模型选型

通义千问Qwen2具有0.5B、1.5B、7B、72B等一系列参数大小不等的模型,我们需要做的是从大到小依次测试每个模型的能力,找到满足自己需要的最小参数模型。依1.5B和1.5B-Instruct的主要区别:按照官方文档,前者是预训练模型,后者是经过指令微调的模型。

golfxiao的专栏 2655

弱小目标检测跟踪算法研究(5) 基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制

基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制1. 前言2. 顶帽变换(Top_hat)算法3. Matlab仿真4. 小结 1. 前言 红外图像中的弱小目标,目标属性包涵“弱"和“小’’两个方面:“弱’’是指目标在红外波长上所表现出来的强度,具体反映到所拍摄的红外图像上,就是指目标的灰度值;而“小’’是指目标的尺寸大小,也就是前面所述的成像面积很小,反映到红外图像上就是指目标所占的像素数目很少。 SPIE国际光学工程学会(Societyof Photo一0ptical Instrument

sinat_34897952的博客 5291

寄存器、地址总线和指令集的工作原理,知识体系一共包含哪些部分?底层原理是什么?

寄存器、地址总线和指令集是计算机体系结构的核心组成部分,它们共同决定了计算机的性能、功能和效率。理解这些组件的工作原理对于深入掌握计算机底层运行机制至关重要。

长风破浪会有时的博客 925

大数据利器Hadoop:从基础到实战,一篇文章掌握大数据处理精髓!

在当今大数据时代,数据量的爆炸式增长对企业和技术提出了前所未有的挑战。如何高效地存储、处理和分析这些庞大的数据集,成为了亟待解决的问题。Hadoop作为一种分布式计算框架,应运而生,为大数据处理提供了有效的解决方案。Hadoop是一个由Apache软件基金会维护的开源项目,它基于Google的分布式文件系统(Google File System,GFS)和MapReduce计算模型设计。Hadoop的主要目标是处理大规模数据集,它可以在普通硬件集群上运行,从而降低了大数据处理的成本。

邓邓子的博客 8276

汇编指令实战指南:从x86/ARM架构到反汇编调试的底层认知

汇编指令是计算机底层硬件交互的核心语言,它直接对应CPU的寄存器、内存和运算单元操作。理解汇编原理是掌握程序执行机制、性能优化和系统调试的基础。在x86/x86-64等复杂指令集架构中,指令长度可变且功能强大,支持灵活的内存寻址模式;而ARM等精简指令集架构则采用固定长度指令和加载/存储分离的设计,在移动和嵌入式领域广泛应用。掌握汇编指令的分类,如数据传送、算术运算和流程控制指令,能帮助开发者深入分析性能瓶颈、排查底层错误。通过反汇编工具如GDB和x64dbg进行实战调试,可以直观观察编译器优化、理解函数调

weixin_33709609的博客 394

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

system call——系统调用

博客地址转至https://xisynotz.xyz 1. 系统调用 系统调用是操作系统提供的有效服务界面,一般使用高级语言编写,如c和c++,对于特定的较为底层的任务,则使用汇编语言指令。 2. API和系统调用 API,应用程序接口,提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力。 使用API而不直接调用系统调用的原因主要由以下两点:1)由于API隐藏了绝大多数...

saber_jk的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: Debian中文美化
下一篇: 珊瑚虫外挂原理分析
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值