- 2024-11-13汇编角度看值传递类对象
首先奉上源代码classA{private:inti;public:A(){std::cout<<"defaultconstructoriscalled"<<std::endl;i=0;}A(int_i):i(_i){}A(constA&obj){std::cout<<"c
- 2024-11-11c++ 对于传递引用和传递值的理解
首先先上一段c++代码,可以看出foo函数参数是引用类型,bar函数参数是值类型typedefstructA{intx;inty;}A;voidfoo(A&a){ra.x++;}voidbar(Aa){a.x++;}intmain(){Aa={1,2};foo(a);bar(a);return0;}在vscode
- 2024-10-23汇编语言
寄存器RIP存放下一条指令的偏移地址RSP存放当前栈帧的栈顶偏移地址RBP存放当前栈帧的栈底偏移地址RAX通用寄存器。存放函数的返回值汇编实际中执行指令时,EIP已经移动到下一行了cmp语句cmpa1,0x61suba1,0x61本质a1-0x61a1=a1-0x61不同a1不会赋值a1
- 2024-10-23pwndbg
dbg内容runrun:跑一遍 start:运行到程序认为的入口点停止ccontinue,执行到断点为止ni单步si步入iir:查看寄存器ib:查看断点disassembledisassemble$rip:反汇编rip附近汇编disassemblemain:反汇编mainbb*0x000055555555527a:在0x000055555555527a处下断点disable
- 2024-10-12NewStar CTF[pwn] overwrite WriteUp
IDA打开,查看func()函数,得到以下代码点击查看代码unsigned__int64func(){size_tinput1[6];//[rsp+Ch][rbp-84h]BYREFcharnptr[72];//[rsp+40h][rbp-50h]BYREFunsigned__int64v3;//[rsp+88h][rbp-8h]v3=__readfsqword(0x28u);printf("plsin
- 2024-09-30C++ Data Member Pointers 和 Member Function Pointers
https://itanium-cxx-abi.github.io/cxx-abi/abi.html#member-pointers2.3MemberPointers2.3.1DataMemberPointersThebasicABIpropertiesofdatamemberpointertypesarethoseofptrdiff_t.Adatamemberpointerisrepresentedasthedatamember's
- 2024-09-28深入汇编:计算机工作机制解析
深入汇编:计算机工作机制解析计算机的工作原理计算机的工作原理可以概括为以下几个步骤:输入:用户通过键盘、鼠标或其他输入设备提供数据。处理:CPU(中央处理单元)根据程序指令处理数据。存储:内存和硬盘等存储设备用于保存数据和程序。输出:处理结果通过显示器、打印机等输出设备
- 2024-09-28TSCTF-J 2024 部分WP
TSCTF-J2024部分题目复现(未完结)iPlayBingo:F12拿到answerCheck.wasm文件,同时观察js代码找到关键函数Check()利用Wabt将answerCheck.wasm文件转为answerCheck.c和answerCheck.h文件,但此时可读性依然较差。用gcc链接成answerCheck.o文件,此时可以使用IDA反汇编。 关键的函数
- 2024-09-20++i与i++在效率上的细微差别
在一些特定的使用中,i++可能将原值用中间量存起来以待使用,下面看相关程序的汇编代码(使用gcc)。i++源程序:#include<stdio.h>intmain(){ inti=1; printf("%d\n",i++); return0;}i++汇编:main:.LFB0: .cfi_startproc endb
- 2024-09-10c++引用
c++指针和引用的区别指针和引用在C++中都用于间接访问变量,但它们有一些区别:指针是一个变量,它保存了另一个变量的内存地址;引用是另一个变量的别名,与原变量共享内存地址。指针(除指针常量)可以被重新赋值,指向不同的变量;引用在初始化后不能更改,始终指向同一个变量。指针可以为
- 2024-09-02记一次 .NET某实验室自动进样系统 崩溃分析
一:背景1.讲故事前些天有位朋友在微信上联系到我,说他们的程序在客户那边崩掉了,让我帮忙看下怎么回事,dump也拿到了,那就上手分析吧。二:WinDbg分析1.哪里的崩溃既然是程序的崩溃,自然是有原因的,皮裤套棉裤,必定有缘故,不是皮裤太薄就是棉裤没毛,用!analyze-v观察下异常信息。0:107>!
- 2024-08-27NASM 与 GDB 简易调试指南
本文目标:在Linux平台中,利用nasm与gdb快速构建一个编译与调试工具链,以下仅做简单演示。主要还是因为学习“计算机组成原理”中intel指令相关内容的时候,太生涩难懂了。就是想简单实操一下,深刻理解,因此才出了这篇文章。我们以一下程序为例举例说明。section.datahel
- 2024-08-27记一次 .NET某实验室自动进样系统 崩溃分析
一:背景1.讲故事前些天有位朋友在微信上联系到我,说他们的程序在客户那边崩掉了,让我帮忙看下怎么回事,dump也拿到了,那就上手分析吧。二:WinDbg分析1.哪里的崩溃既然是程序的崩溃,自然是有原因的,皮裤套棉裤,必定有缘故,不是皮裤太薄就是棉裤没毛,用!analyze-v观察下异常信息。
- 2024-08-25C++函数调用栈从何而来
竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生~个人主页:rainInSunny | 个人专栏:C++那些事儿、Qt那些事儿目录写在前面原理综述x86架构函数调用栈分析如何获取rbp寄存器的值总结写在前面 程序员对函数调用栈是再熟悉不过了,无论是使用IDE调试还是GDB等工具进行调试,都离
- 2024-08-25C++函数调用栈从何而来
竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生~个人主页:rainInSunny | 个人专栏:C++那些事儿、Qt那些事儿文章目录写在前面原理综述x86架构函数调用栈分析如何获取rbp寄存器的值总结写在前面 程序员对函数调用栈是再熟悉不过了,无论是使用IDE调试还是GDB
- 2024-08-19“i++”是怎么工作的?
我们以下面这么一段代码开始voidtest_inc(){inti=10;i=i++;printf("i=%d\n",i);}运行输出i=10看起来出乎意料,来我们看看他编译之后的汇编代码就明白了test_inc:.LFB20:.cfi_startprocendbr64pushq%rbp
- 2024-08-18X86-64 Reference Sheet
X86-64ReferenceSheetIhttps://www.cs.cmu.edu/afs/cs/academic/class/15213-s20/www/recitations/x86-cheat-sheet.pdfX86-64ReferenceSheetIIRegistersRegisterPurposeSavedacrosscalls%raxtempregister;returnvalueNo%rbxca
- 2024-08-12从汇编层看64位程序运行——有惊无险的栈溢出
大纲main进入时寄存器状态rbp:1rsp:df18分析过程离开时寄存器状态rbp:df10rsp:def8foo7进入时寄存器状态rbp:df10rsp:def8分析过程离开时寄存器状态rbp:df10rsp:def0foo进入时寄存器状态rbp:df10rsp:def8分析过程离开时寄存器状态rbp:df10rsp:def8main进入时寄
- 2024-07-18记一次 redis 事件注册不当导致的内存泄露
线上的程序跑着跑着内存越来越大,并且没有下降的趋势,重启一下程序也只能短暂恢复。通过htop命令再按一下M键按内存占用大小排个序,程序会占好几个G。那好,让我们来分析一下。收集dump通过top或htop进程管理器,或ps命令查找到目标进程id,然后使用如下命令生成dump:created
- 2024-07-16暑期集训经典栈溢出
checksec看保护:NXida看一下(这是main函数)func1()func2()func3()func4()func5()先静态分析一波:进到func5()之后系统会给一个起始地址,从这个地址开始输入,判断一下rbp指的地址有没有被改掉,被改掉就fail了,而很直观的看出buf有溢出漏洞,程序中又有后门函数win,所以就将返
- 2024-07-14函数调用栈
1、程序源代码:[xuanmiao@localhostPractice]$catmain.c#include<stdio.h>intplus(inta,intb){intc=a+b;returnc;}intmain(){inta=1,b=2;intc=0;c=plus(a,b);return0;}2、编译[xuanmiao@localhostPractice
- 2024-06-07Dragon_Knight_CTF-stack(栈迁移)
Dragon_Knight_CTF-stack(栈迁移)程序的保护情况如下,可以看到没有开启pie保护Arch:amd64-64-littleRELRO:PartialRELROStack:NocanaryfoundNX:NXenabledPIE:NoPIE(0x3fe000)可以看道main函数也很简洁,只有一个0x10大小的溢出,程序给了libc,版
- 2024-05-30指针与引用区别
=====来自:https://www.cnblogs.com/honernan/p/12175899.html每日一问1:指针和引用的区别 指针(pointer)和引用(references)都是对另一个变量的一种关联,即通过指针和引用可以使用另一个变量。而它们最大的区别在于:指针是一个变量,而引用不是。但在c++底层中,引用是通过
- 2024-05-21再探虚函数
虚函数是一种成员函数,其行为可以在派生类中被覆盖,支持动态调用派发。使用示例代码如下:extern"C"{//避免operator<<多次调用,简化汇编代码voidprintln(constchar*s){std::cout<<s<<std::endl;}}void*operatornew(size_tn){void*p=malloc(n);
- 2024-04-24boom lab分析
单步调试:(gdb)bt#10x0000000000401347instrings_not_equal()#20x0000000000400eeeinphase_1()#30x0000000000400e3finmain(argc=<optimizedout>,argv=<optimizedout>)atbomb.c:74这里的执行流程为:/*Hmm...Sixphasesmustbemoresecur