IL汇编 ldarg 指令学习

IL汇编代码,

cpp 复制代码
.assembly  extern  mscorlib {}
.assembly MathLib
{
    .ver  1 : 0 : 1 : 0
}

.module MathLib.dll

.namespace  MyMath
{    
    .class   public  ansi auto MathClass extends [mscorlib]System.Object
    {        
        .method  public  int32 GetSquare(int32) cil managed
        {
            .maxstack  3
            ldarg.0     //  加载对象的 this 指针到堆栈上
            ldarg.1     //  实例方法的实际的参数索引总是从 1 开始
            ldarg.1
            mul
            ret        
        }
    }
}

构建为一个dll如下;dll包含一个方法,计算一个整数的平方并返回值;

然后做一个测试程序;

cpp 复制代码
using System;
using MyMath;
 
class Program
{
 
static void Main(string[] args)
{
 
    int a=9;
    int i = MathClass.GetSquare(a); 
    Console.WriteLine(i); 
    Console.ReadKey();
}
}

命令行构建此测试程序;

命令行构建时引用到外部的dll需要用 /r 指定dll文件名,见,

C# csc构建dll 和 csc构建时指定dll_bcbobo21cn的博客-CSDN博客

然后出现下图错误;

一时还不知道怎么弄;

先学习一下IL汇编指令;

ldarg.n

把第n个参数装入堆栈;在非静态函数中,第0个参数是一个隐含的参数,代表this;

mul指令就是乘法;

相关推荐
Crossoads1 天前
【汇编语言】call 和 ret 指令(一) —— 探讨汇编中的ret和retf指令以及call指令及其多种转移方式
android·开发语言·javascript·汇编·人工智能·数据挖掘·c#
Crossoads2 天前
【汇编语言】转移指令的原理(三) —— 汇编跳转指南:jcxz、loop与位移的深度解读
android·汇编·人工智能·redis·单片机·深度学习·机器学习
zhuqiyua3 天前
深入解析Kernel32.dll与Msvcrt.dll
汇编·microsoft·windbg·二进制·dll
Crossoads4 天前
【汇编语言】数据处理的两个基本问题(三) —— 汇编语言的艺术:从div,dd,dup到结构化数据的访问
android·linux·运维·服务器·汇编·机器学习·数据挖掘
Crossoads4 天前
【汇编语言】数据处理的两个基本问题(二) —— 解密汇编语言:数据长度与寻址方式的综合应用
android·java·开发语言·javascript·汇编·数据挖掘·c#
Coding~5 天前
逆向攻防世界CTF系列38-xxxorrr
c语言·汇编·安全
Crossoads5 天前
【汇编语言】数据处理的两个基本问题 —— 汇编语言中的数据奥秘:数据位置与寻址方式总结
android·汇编·人工智能·redis·单片机·深度学习·机器学习
Crossoads6 天前
【汇编语言】更灵活的定位内存地址的方法(一)—— 字符操作:and与or指令、ASCII码及大小写转换
android·linux·运维·服务器·汇编·机器学习·数据挖掘
不会写算法的小沈6 天前
函数栈帧的创建与销毁
c语言·汇编·数据结构
zhuqiyua7 天前
windows二进制安全零基础(二)
汇编·安全·二进制