IL汇编ldc指令学习

ldc指令是把值送到栈上,

说明如下,

ldc.i4 将所提供的int32类型的值作为int32推送到计算堆栈上;

ldc.i4.0 将数值0作为int32推送到计算堆栈上;

...

ldc.i4.8 将数值8作为int32推送到计算堆栈上;

ldc.i4.m1 将数值-1作为int32推送到计算堆栈上;

ldc.i4.s 将提供的int8值作为int32推送到计算堆栈上(短格式);

ldc.i4 99,这样是把数值99送到栈上;

ldc.i4.s,也是把值送到栈上,但是需要提供的是一个字节长的整型;

i4是数据类型助记符,是指4字节的整型;s则是指 Single Byte ;

ldc.i4.s 11,这样是把数值11送到栈上;

ldc.i4.0 到 ldc.i4.8,是直接送最后的这个数值,0-8,到栈上;

示例;

cpp 复制代码
.assembly extern mscorlib {}
 
 .assembly Test
 {
     .ver 1:0:1:0
 }
 .module test.exe
  
 .method static void main() cil managed
 {
     .maxstack 12
     .entrypoint
     
     ldc.i4 202
     call void [mscorlib]System.Console::Write (int32)
     ldc.i4 303
     call void [mscorlib]System.Console::Write (int32)
     ldc.i4.6
     call void [mscorlib]System.Console::Write (int32)
     ldc.i4.5
     call void [mscorlib]System.Console::Write (int32)
     ldc.i4.m1
     call void [mscorlib]System.Console::Write (int32)
     ldc.i4.s 3000
     call void [mscorlib]System.Console::Write (int32)
     ret
 }

先把202送到栈上,然后输出;再把303送到栈上,然后输出;

然后把数值6送到栈上,然后输出;再把数值5送到栈上,然后输出;

再把数值-1送到栈上,然后输出;

然后看一下,ldc.i4.s 3000,会输出什么;带了.s之后需要提供一个字节长的整型,单字节整型的最大值是255;

运行如下;

没有输出回车换行,数字都是连在一起的,最后一次输出-72,倒数第二次输出-1;

有时间继续;

相关推荐
浩浩测试一下1 小时前
抬栈 恢复上下文 (逆向分析)
汇编·逆向·堆栈·windows核心编程
zhouwy1131 小时前
ARM汇编指令集详解
汇编·arm开发
iCxhust2 小时前
微机原理实践教程(汇编篇)---A002流水灯
汇编·单片机·嵌入式硬件·51单片机·微机原理
浩浩测试一下2 小时前
栈帧 抬栈与平栈 (逆向分析)
汇编·windows api·堆栈·windows编程·windows 开发
陈eaten3 小时前
win11下nasm编写汇编及链接方案
汇编·链接·nasm·gcc·golink
iCxhust3 小时前
【无标题】8086/8088裸机对于学习微机原理的重要意义
汇编·单片机·嵌入式硬件·嵌入式·微机原理
鸽芷咕3 天前
DOSBox 汇编环境搭建完整教程:安装配置 + MASM/LINK/DEBUG 工具链配置详解
汇编
Gofarlic_OMS3 天前
UG/NX许可证管理高频技术问题解答汇编
java·大数据·运维·服务器·汇编·人工智能
iCxhust3 天前
如何在汇编中修改CS:IP
汇编·单片机·嵌入式硬件·51单片机·微机原理
枷锁—sha4 天前
【CTFshow-pwn系列】03_栈溢出【pwn 073】详解:静态编译下的自动化 ROP 链构建
网络·汇编·笔记·安全·网络安全·自动化