首页 > 编程语言 >滴水逆向笔记系列-7.堆栈图-8.c语言反汇编-9.数据类型

滴水逆向笔记系列-7.堆栈图-8.c语言反汇编-9.数据类型

时间:2024-03-14 13:23:07浏览次数:27  
标签:调用 函数 符号 约定 数据类型 反汇编 堆栈

第七课 堆栈图

1.函数

函数的入口
image.png
汇编中的函数
image.png
函数有入口出口,但不一定有返回值和参数

2、堆栈

windows堆栈:
image.png
什么是堆栈平衡:
image.png

第八课 c语言

分析这段代码的反编译

image.png
image.png
image.pngimage.png
有时候跟反汇编不一定要进函数看,有时候从上下文就能大概猜出函数的作用
image.png
image.png

第九课 c语言2

1、什么是裸函数

可以看到plus1()函数是可以正常运行且就算是空函数也会有开栈等操作
image.pngimage.pngimage.png
下图可以看到裸函数plus里面是一堆int 3(断点)
image.png
这时候如果我们自己在裸函数里面写上ret,程序就能正常运行
image.png
image.png

总结:

普通函数编译器会自动帮我们操作一些堆栈,但是裸函数什么都没有,全需要我们自己写

2、调用约定

前言

这是正常调用函数的四句汇编,可以看到正常都是两个参数从右到左入栈,调用约定就是约定这些东西
image.png

常见的三个调用约定:

image.png
__cdecl():一般c++默认的调用约定;从右至左入栈,采用外平栈
image.png
__stdcall():一般windows api默认的调用约定;从右至左入栈,采用内平栈
image.pngimage.png
__fastcall():从右至左入栈,剩下前两个使用edx和ecx;如果只有两个参数,都是使用mov,则不用平衡堆栈,但是还是使用的内平栈
image.png

总结:

1、fastcall运行较快
2、看堆栈平衡的代码(ret 8)去 判断函数有几个参数不一定准确,可能调用约定不一样,或者fastcall他有两个参数是mov,和堆栈没关系

3、函数入口点

真正的函数起始的地方是mainCRTStartup()
image.png
不可被替换,他帮我们做了很多初始化操作
image.png

4、数据类型

整数类型

image.png
整数类型分有符号和无符号
image.pngimage.png

总结:

1、其实内存中有无符号存储到内存里面都是一样的
2、在运算中需要注意
3、有符号数在计算时汇编指令就会使用有符号的比较指令,无符号的就会使用无符号的指令,一切都是写程序的人决定的,

浮点类型

image.png
image.png
0到23位存放科学计数法后小数位,23到31位存放指数-1
image.png
image.png

作业

image.png

2、image.png
3、image.png

标签:调用,函数,符号,约定,数据类型,反汇编,堆栈
From: https://www.cnblogs.com/xiaoxin07/p/18072643

相关文章

  • 滴水逆向笔记系列 - 4.内存地址_堆栈-5.标志寄存器-6.JCC命令
    第四课内存地址_堆栈内存地址db与dd命令db:d表示查找,b表示bytedd:d表示查找,d表示dworddb命令在数据区找出目的内存地址,发现数据区内和堆栈区显示的是相反的反汇编窗口和寄存器窗口的都是从高位到低位,数据区反之(比如数据0x12345678,12是高位,8是低位)所以0012FFDC这块内存(1字节)......
  • 【Java面试题-基础知识01】Java数据类型四连问?
    一、Java中的基础数据类型有哪些?Java中的基本数据类型包括:1.byte:8位有符号整数,范围为-128到127。2.short:16位有符号整数,范围为-32768到32767。3.int:32位有符号整数,范围为-2147483648到2147483647。4.long:64位有符号整数,范围为-9223372036854775808到9223372036854775807。5.......
  • Redis 八种常用数据类型详解
    夯实基础,这篇文章带着大家回顾一下Redis中的8种常用数据类型:5种基础数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。3种特殊数据类型:HyperLogLog(基数统计)、Bitmap(位图)、Geospatial(地理位置)。Redis5种基本数据类型Redis共有5种基本数据类......
  • [20240312]sqlplus define数据类型问题.txt
    [20240312]sqlplusdefine数据类型问题.txt--//编写sql脚本遇到的问题,通过例子说明。1.环境:SCOTT@book>@ver1111PORT_STRING                   VERSION       BANNER------------------------------------------------------------------------......
  • 关于Sql server数据类型HierarchyID 数据类型用法和递归显示完整路径
    SQLServer2008版本之后的新类型HierarchyID不知道大家有没有了解,该类型作为取代id,parentid的一种解决方案,让人非常惊喜。官方给的案例浅显易懂,但是没有实现我想要的基本功能,树形结构中完整名称路径的展示。本文末尾是一个完整路径的样例,需要更多基本操作可以参考文末微软链......
  • day 06-1 数据类型(列表)
    day06列表常见的数据类型int,整数类型(整型)bool,布尔类型str,字符串类型list,列表类型:用于储存一些数据的容器(有序&可修改),动态的容器tuple,元组类型:用于储存一些数据的容器(有序&不可修改),固定的容器dict,字典类型set,几何类型float,浮点类型(浮点型)1列表列表(list),是一......
  • Java获取堆栈信息的3种方法
    本文分享自华为云社区《Java如何获取堆栈信息》,作者:皮牙子抓饭。在Java编程中,获取堆栈信息对于调试和故障排除非常重要。Java提供了多种方式来获取当前线程的堆栈信息,以便了解线程执行的情况。下面介绍几种常用的方法:1.使用Thread.currentThread().getStackTrace()可以通过Th......
  • 实验1 C语言开发环境使用和数据类型、运算符、表达式
    1#include<stdio.h>2intmain()3{4printf("o\n");5printf("<H>\n");6printf("II\n");78return0;9}#include<stdio.h>intmain(){printf("oo\n"......
  • Python数学建模-2.2Python基本数据类型
    各位小伙伴大家好,今天开始学习司守奎老师的《数学建模算法与应用》啦,我也会边学习边与大家分享书中的内容,希望与大家共同进步哦Python中的基本数据类型主要包括以下几种:数字(Numbers)整型(int):正或负整数,没有限制大小。例如:100,-8080,0。浮点型(float):浮点数,即带有小数点的数字。......
  • 实验1 C语言开发环境使用和数据类型、运算符、表达式
    task1点击查看代码#include<stdio.h>intmain(){printf("o\n"); printf("<H>\n"); printf("II\n"); printf("o\n"); printf("<H>\n"); printf("II\n"); system("......