关于递归的理解 1.递归的理解1)递归的概念2)递归的三大要素①明确函数要干什么②寻找递归结束条件③找出函数的等价关系式④举些例子 2.递归之八皇后问题理解3.递归的优化1)尾调用2)memoization3)函数式编程(Java描述):尾调用及抽象递归 4.递归的调用机制(简单版)5.递归的调用机制(复
学习需具备知识---汇编相关知识 2、第一个C程序 1.创建项目--Win32 console application 2.创建文件--source file --new--C++ source file 3.入口程序 4.构建-F7 5.运行-F5 int plus1(int x,int y) { return 0; } 1: 2: int plus1(int x,
主程序 结果见上图 .386.model flat,stdcalloption casemap:noneinclude <windows.inc>include <user32.inc>includelib <user32.lib>include <kernel32.inc>includelib <kernel32.lib>.code start:call test2test2 proc local @loc1:dwor
D:\masm32\include\windows.inc文件中有大部分类型的定义 User32.inc文件中没有CreateWindow,但是有CreateWindowEx 汇编指令Enter相当于push ebp, mov ebp, esp 汇编指令Leave相当于mov esp, ebp, pop ebp Win32汇编语法糖: .if .elseif .else .endif .wh
0x01.函数 这节就先讲函数吧,函数大致分为四种类型 1、无参数、无返回值的函数格式 void 函数名() { //代码段 } void Hello() { printf("Hello World!"); } 2、有参数,无返回值的函数格式 void 函数名(参数类型 参数名,参数类型 参数名) { //代码段 } void add(int a,int b) {
xxx.asm: %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export astrstr dllmain: mov eax,1 ret 12 ;-------------------------------------------------------------; ; 返回一个指针,该指针指向字符串中第一次出现的搜索字符
xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export astrrev dllmain: mov eax,1 ret 12 ;------------------------------------------------; ; 反转字符串的字符。 ;--------------------------------------------
xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export astrcpy_s dllmain: mov eax,1 ret 12 astrcpy_s: push ebp mov ebp,esp push ebx mov eax,[p1] ; dst char ptr mov ecx,[p2] ; dwDstSize mo
game 题目描述:菜鸡最近迷上了玩游戏,但它总是赢不了,你可以帮他获胜吗 PEiD 查壳,发现没有壳 拉进 ida x32,直接 shift + F12 查看字符串,发现 flag 字样 双击进入汇编代码,发现函数 sub_45E940,双击函数进入代码图,按 F5 反汇编进入伪代码 发现声明了非常多的变量,但是地址都是连续的 c
程序中栈的基础知识 栈是向下生长的 向下生长指的是从内存的高地址-->低地址的方向拓展。 栈有栈底和栈顶,从上面可以知道栈顶的地址是比栈底的要低的。 对于X86体系的CPU而言,大概需要知道以下基础知识: ebp寄存器:一般叫做基址指针或者帧指针; esp寄存器:一般叫做栈指针 ebp在没有
创建空项目 右键项目-》生成依赖项-》生成自定义-》masm//其中这一步不能和下一个步骤顺序颠倒,必须先设置这一项,在添加源文件,编辑 添加main.cpp sum.asm #include <cstdio>extern "C" int sum(int a, int b); int main(int argc, char** argv){ int a = 1; int b = 2; int c = sum
目标文件: ciscn_2019_ne_5。 来源 :https://buuoj.cn/challenges 保护情况:保护是没有保护的 主要伪代码: int __cdecl main(int argc, const char **argv, const char **envp) { int v3; // [esp+0h] [ebp-100h] char src[4]; // [esp+4h] [ebp-FCh] char v5; // [
forgot 简化版代码如下 int __cdecl main() { int v0; // ebx char email_check[32]; // [esp+10h] [ebp-74h] int(*v3)(); // [esp+30h] [ebp-54h] int (*v4)(); // [esp+34h] [ebp-50h] int (*v5)(); // [esp+38h] [ebp-4Ch] int (*v6)(); // [esp+3Ch] [ebp-48h] i
题目描述:菜鸡发现Flag似乎并不一定是明文比较的 用ida打开附件,然后F5查看伪代码 int __cdecl main(int argc, const char **argv, const char **envp) { signed int v3; // ebx char v4; // al int result; // eax int v6; // [esp+0h] [ebp-70h] int v7; //
目录一、API调用过程(3环部分)什么是API?几个重要的DLLIDA分析ReadProcessMemory API(二)API调用过程(3环进0环)1、_KUSER_SHARED_DATA 结构2、分析7FFE0300h进Ring0的方式3、两种进Ring0的方式3.1 API通过中断门进Ring03.2 通过int 0x2e进Ring03.3 sysenter进Ring0(三)API调用过程(保护
printf函数 printf("%d", num); 汇编代码调用过程: 0071183F mov eax,dword ptr [num] 00711842 push eax 00711843 push offset string "%d" (0717B30h) 00711848 call _printf (0711046h) 0071184D add es
栈迁移 当我们的rop链过长时很可能栈空间不够,并且ebp之前的空间其实只是填充一些没什么用的数据 栈迁移机理 与传统的pop_ret类似,利用level_ret实现栈的迁移,都是寻找很小短的零碎代码,进行拼接,和拼积木很像。 level ret//拆解 mov ebp,esp//esp跟着ebp走 pop ebp //栈基指针的转
反汇编(Disassembly) 即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解、外挂技术、病毒分析、逆向工程、软件汉化等领域,学习和理解反汇编对软件调试、系统漏洞挖掘、内核原理及理解高级语言代码都有相当大的帮助,软件一切神秘的运行机制全在反汇编代码里面。下面将分
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 两种异常(CPU异常、用户模拟异常)的收集 文章的核心:异常收集的是什么?(TrapFrame与ExceptionRecord);如何收集异常?(看文章)。 1. 异常的分类 ① CPU指令异常 (比如除零异常) CPU运行检测到; ②
反汇编(Disassembly) 即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解、外挂技术、病毒分析、逆向工程、软件汉化等领域,学习和理解反汇编对软件调试、系统漏洞挖掘、内核原理及理解高级语言代码都有相当大的帮助,软件一切神秘的运行机制全在反汇编代码里面。 数组和指
我们每个程序员或许都有一个梦,那就是成为大牛,我们或许都沉浸在各种框架中,以为框架就是一切,以为应用层才是最重要的,你错了。在当今计算机行业中,会应用是基本素质,如果你懂其原理才能让你在行业中走的更远,而计算机基础知识又是重中之重。下面,跟随我的脚步,为你介绍一下计算机底层知识。
反汇编(Disassembly) 即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解、外挂技术、病毒分析、逆向工程、软件汉化等领域,学习和理解反汇编对软件调试、系统漏洞挖掘、内核原理及理解高级语言代码都有相当大的帮助,软件一切神秘的运行机制全在反汇编代码里面。 本笔记的
没有信息 丢进IDA 1 __int64 __cdecl main_0() 2 { 3 int v0; // eax 4 const char *v1; // eax 5 size_t v2; // eax 6 int v3; // edx 7 __int64 v4; // ST08_8 8 signed int j; // [esp+DCh] [ebp-ACh] 9 signed int i; // [esp+E8h] [ebp-A0h] 10
学习一下栈迁移,以下部分内容转载于看雪的文章 以32位为例,在汇编中,用call指令来调用一个函数,call 函数等同于 push eip+4 push ebp mov ebp,esp 主要的目的还是用来保护现场,避免执行完函数吼堆栈不平衡或找不到之前的入口地址 当调用完函数后,就需要用 leave;ret;来还原现场 leave