结构体作为参数的反汇编

1:函数传参数的方式是将数据进行拷贝传递的。

2:基本数据类型编译器一般是通过PUSH指令来将参数入栈的,但是当传入的参数是结构体时,会采取,函数堆栈初始化的方式进行参数的拷贝

PUST EBP

MOVE EBP,ESP

SUP ESP,40H

MOV ESI,[EBP-40]

MOV EAX,0CCCCCCCH

MOV ECX,16H;          需要初始化的堆栈的长度是40H也就是56个字节的长度,在32位的系统中,ESP的移动单位长度是4字节,所以需要16次初始化操作

REP STOS DOWRD PTR[ESI]

3:当传入的参数是结构体是【且宽度比较大的时候】,参数的传递方式会采用类似初始化堆栈的方式

SUB ESP 18H

MOV ECX,6H

MOV ESI,6H

REP STOS DWORD PTR [ESI]

4:结构体变量一般都定义为全局变量

时间: 2025-01-05 07:32:19

结构体作为参数的反汇编的相关文章

C语言 结构体作为参数和返回值使用

方案一:结构体变量作为参数,进行传值. 编译器需要拷贝,不影响origin value,使用成员操作符(.)直接访问 /********************************************************************** * 版权所有 (C)2017, Wang maochun. * * 文件名称:travel.cpp * 文件标识:无 * 内容摘要:主要演示结构体作为参数以及返回值 * 其它说明:"传值” * 当前版本:V1.0 * 作 者:Wang m

C#调用C++ 平台调用P/Invoke 结构体--输入输出参数、返回值、返出值、结构体数组作为参数【五】

[1]结构体作为输入输出参数 C++代码: typedef struct _testStru1 { int iVal; char cVal; __int64 llVal; }testStru1; EXPORTDLL_API void Struct_Change( testStru1 *pStru ) { if (NULL == pStru) { return; } pStru->iVal = 1; pStru->cVal = 'a'; pStru->llVal = 2; wprintf(

golang 服务或结构体可选参数的赋值

// 服务结构体 type Server struct { opts options //可选参数变量 addr string } //可选参数列表 type options struct { A int B string C bool D int } // 为可选参数赋值的函数 type ServerOption func(*options) func Afunc(a int) ServerOption { return func(o *options) { o.A = a } } func

CreateThread传递多个参数的方法(利用结构体的参数指针)

很多朋友一直都在问CreateThread如何传递多个参数,CreateThread传递参数的方式是指针传递的,所以这里也可以利用指针来做!Demo 关键代码如下: type  TfrmTestThread = class(TForm)    Button1: TButton;    procedure Button1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarati

C语言中结构体参数变量的传递

c语言  结构体  函数  参数  传递 一.前言 本文中的程序实现对员工信息结构体字段赋值并打印出来的功能.该结构体的定义如下: // 员工信息结构体 typedef struct {        INT8       szEmployeeName[100];     // 员工姓名        UINT16  iEmployeeAge;                    // 员工年龄        UINT32  iEmployeeNo;                      

结构体,结构体指针作为函数参数的应用笔记

1. 结构体,结构体指针作为函数参数有何区别 #include <stdio.h> #include <string.h> struct animal { char name[30]; int num; }; //使用结构体作为参数 浪费内存 需要建立结构体 void change_struct(struct animal cat) { cat.num = 17; } //函数内部改变需要地址 所以需要指针保存 void change_point(struct animal *ca

C语言结构体传值--&gt;通过指针进行传值

结构体的传值方法一共有三种形式,通过传递结构体,传递指针,传递结构体自身参数.传递指针的方式与另外两种方法最大的不同就是传递的实际上是结构体的地址,在传值的过程中,指针需要进过初始化分配内存(也就是使用malloc()函数分配空间给指针) 来看看以下代码: 有两个点需要注意: (1)在方法设置类型的时候 是一个struct Book 类型,同时还是一个指针的类型,可以说(struct Book && pointer类型) (2)在代码的32,33行处,声明了一个struct Book &a

Swift入门篇-结构体

前面主要是介绍swift语言中基本类型的用法,今天给大家介绍的是swift的结构体的用法,swift中结构体的用法和其他语言的用法,还有不太一样,不过您多敲几遍,就可以理解结构体,结构体在ios开发中是灰常重要的一部分,如果您很好的掌握结构体,在后面ios开发中,会理解的更加清楚. 一:结构体声明 格式: struct 结构体名 { } 说明: 1: struct 是定义结构体的关键字 例子 /* 1:struct 是结构体的关键字 2:student 结构体名称 3:student() 创建一

C-函数指针,指针函数,构造体之结构体

指针函数: 返回值是指针的函数 指针函数的定义: 一般形式: 类型说明符 *函数名(形参表){ 函数体 } 其中, 函数名之前加了’*’ 号表明这是一’指针型函数, 即返回值是一个指针. 类型说明符表示了返回的指针所指向的数据类型 函数指针: 一个函数在内存中总是占用一段连续的内存区, 而函数名就是该函数所占内存区的首地址——把函数的这个首地址(入口地址) 赋予一个指针变量, 使该指针变量指向该函数. 然后通过指针变量就可以找到并调用这个函数——这种指向函数的指针变量称为”函数指针变量” 类型说