浅谈gdb在漏洞发掘中的使用

从零到一:2026年转行漏洞挖掘工程师的核心能力构建指南 漏洞挖掘是网络安全领域主动防御体系的关键技术,其核心在于通过深入分析系统与代码逻辑,主动发现潜在的安全缺陷。其技术原理融合了逆向工程、协议分析与软件测试方法,旨在构建先于攻击者的防御能力。这项技术的价值在于能够显著降低软件生命周期中的安全风险,提升产品的内在安全性,广泛应用于金融科技、物联网、云原生及供应链安全等关键场景。掌握漏洞挖掘能力,意味着能够驾驭自动化代码审计、云原生环境横向移动等前沿技术,从而在数字化浪潮中把握主动安全防御的先机。 阅读详情
浅谈gdb在漏洞发掘中的使用
[-== 翻译整理 s5Eal[at]ph4nt0m.org ==-]
[#== HP:_blank>http://www.ph4nt0m.org ==#]
[#===EMAIL:realbruce@163.com===#]
[data]:2005-01-03 ^_^
出处:2KCKI.html target=_blank>http://www.securiteam.com/
securityr...5UP0B2KCKI.html


现在越来越多的人开始学习缓冲区溢出方面的原理和应用,这是一件好事,我们在使用别人写的Exploit去Hacker这儿Hacker那儿的时候,应该努力做到知其然,知其所以然。但是很多人在看了几篇即使是看上去很简单的栈溢出方面的文章后便敲起了退堂鼓,因为通篇大量gdb调试的命令和汇编代码让学习看上去变得枯燥无比,但是这方面知识的学习就是这样的。我写这篇文章的目的是总结一下在漏洞发掘中常用的一些gdb命令,降低一下新手入门时的门槛,希望能对大家有所帮助。这篇文章与一般的介绍gdb使用的文章有一定区别,因为那些文章的侧重点是使用gdb去调试一般的应用程序,而本文的则偏重于使用gdb去发掘漏洞时候常用的一些命令。鉴于本人大愚若智,本文如有疏漏之处,敬请mail to me.

运行 gdb
在 shell中,可以使用 'gdb' 命令并指定程序名作为参数来运行 gdb,例如 ‘gdb ./vuln'或者直接是‘gdb vuln’;或者在 gdb 中,可以使用 file 命令来装入要调试的程序,例如 'file vuln'。这两种方式都假设您是在包含程序的目录中执行命令。如果是为了调试core文件,则应用命令‘gdb `executable-file` `core-file`’,例如‘gdb ./vuln core’,如果系统不生成core文件,则可以使用命令‘ulimit -c 9999’打开这个功能。装入程序之后,可以用 gdb 命令 'run' 来启动程序。

绑定一个已有的进程

在shell中,一般使用ps -ax命令来查看目前系统里正在run的所有进程,最前面的一列就是对应的进程号,在gdb里我们可以这样绑定一个正在run的程序进行调试,首先利用上面的那个命令取得进程号,然后打开gdb:

[s5Eal@Heart]# gdb
GNU gdb Red Hat Linux (5.2.1-4)
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type show copying to see the conditions.
There is absolutely no warranty for GDB. Type show warranty for details.
This GDB was configured as i386-redhat-linux.
(gdb) attach 734 0x08048107 at 0x000000f4: .interp ALLOC LOAD READONLY DATA HAS_C
ONTENTS
0x08048108->0x08048128 at 0x00000108: .note.ABI-tag ALLOC LOAD READONLY DATA
HAS_CONTENTS
0x08048128->0x08048158 at 0x00000128: .hash ALLOC LOAD READONLY DATA HAS_CON
TENTS
0x08048158->0x080481c8 at 0x00000158: .dynsym ALLOC LOAD READONLY DATA HAS_C
ONTENTS
0x080481c8->0x08048222 at 0x000001c8: .dynstr ALLOC LOAD READONLY DATA HAS_C
ONTENTS
0x08048222->0x08048230 at 0x00000222: .gnu.version ALLOC LOAD READONLY DATA
HAS_CONTENTS
0x08048230->0x08048250 at 0x00000230: .gnu.version_r ALLOC LOAD READONLY DAT
A HAS_CONTENTS
0x08048250->0x08048258 at 0x00000250: .rel.dyn ALLOC LOAD READONLY DATA HAS_
CONTENTS
0x08048258->0x08048278 at 0x00000258: .rel.plt ALLOC LOAD READONLY DATA HAS_
CONTENTS
0x08048278->0x08048290 at 0x00000278: .init ALLOC LOAD READONLY CODE HAS_CON
TENTS
0x08048290->0x080482e0 at 0x00000290: .plt ALLOC LOAD READONLY CODE HAS_CONT

搜寻heap,bss,got区的内容
(gdb) maintenance info sections

0x08049570->0x08049588 at 0x00000570: .bss ALLOC
0x00000000->0x00000654 at 0x00000570: .stab READONLY HAS_CONTENTS
0x00000000->0x00001318 at 0x00000bc4: .stabstr READONLY HAS_CONTENTS
0x00000000->0x000000e4 at 0x00001edc: comment READONLY HAS_CONTENTS
0x08049588->0x08049600 at 0x00001fc0: .note READONLY HAS_CONTENTS

(gdb) x/1000s 0x08049600 // 显示 heap内容
(gdb) x/1000s 0x08049570 // 显示 bss 内容
...

下断点

(gdb) disassemble main
Dump of assembler code for function main:
0x8048400 : push %ebp
0x8048401 : mov %esp,%ebp
0x8048403 : sub $0x408,%esp
0x8048409 : add $0xfffffff8,%esp
0x804840c : mov 0xc(%ebp),%eax
0x804840f : add $0x4,%eax
0x8048412 : mov (%eax),%edx
0x8048414 : push %edx
0x8048415 : lea 0xfffffc00(%ebp),%eax
...

(gdb) break *0x8048414
Breakpoint 1 at 0x8048414
(gdb) break main
Breakpoint 2 at 0x8048409
(gdb)

删除断点

(gdb) delete breakpoints // or
(gdb) d b
Delete all breakpoints? (y or n) y
(gdb)

在stack区搜寻shellcode或者返回地址或者其他内容

(gdb) break '函数名或者地址'
(gdb) break main
Breakpoint 1 at 0x8048409
(gdb) run
Starting program: /root/vuln
Breakpoint 1, 0x8048409 in main ()
(gdb) x/1000s '地址' // 打印此地址开始的100个字符串
(gdb) p $esp // 查看寄存器esp的内容
$2 = (void *) 0xbffff454
(gdb) x/1000s $esp // 搜寻从esp开始向后的1000个字符串的内容
(gdb) x/1000s $esp-1000 // 搜寻从esp开始向前面的1000个字符串的内容
(gdb) x/1000s 0xbffff4b4 // 搜寻从0xbffff4b4开始向后的1000个字符串的内容

显示寄存器内容

(gdb) break main
Breakpoint 7 at 0x8048409
(gdb) r

Starting program: /home/hack/homepage/challenge/buf/basic

Breakpoint 7, 0x8048409 in main ()
(gdb) info registers
eax 0x1 1
ecx 0x8048298 134513304
edx 0x8048400 134513664
ebx 0x400f6618 1074751000
esp 0xbffff4b4 0xbffff4b4
ebp 0xbffff8bc 0xbffff8bc
esi 0x4000aa20 1073785376
edi 0xbffff924 -1073743580
eip 0x8048409 0x8048409
eflags 0x286 646
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x0 0
gs 0x0 0
(gdb)

显示动态函数指针地址 (常用在return into libc exploits的构造中):

(gdb) break main
Breakpoint 1 at 0x8048409
(gdb) r
Starting program: /home/hack/homepage/challenge/buf/./basic

Breakpoint 1, 0x8048409 in main ()
(gdb) p system
$1 = {} 0x40052460

(gdb) p strcpy
$5 = {char *(char *, char *)} 0x4006e880

显示堆栈

(gdb) backtrace
(gdb) bt

#0 0x8048476 in main ()
#1 0x40031a5e in __libc_start_main () at ../sysdeps/generic/libc-start.c:93
漏洞挖掘与利用开发实战:从Fuzzing到ROP链构建的完整攻防闭环 漏洞挖掘与利用开发是网络安全攻防体系的核心技术环节。漏洞挖掘旨在通过静态分析、动态调试及模糊测试(Fuzzing)等技术,识别软件中的安全缺陷,例如缓冲区溢出、格式化字符串等内存破坏类漏洞。其技术原理在于监控程序对异常输入的响应,结合代码覆盖率反馈(如AFL工具链)或符号执行,自动化地探索程序执行路径。这项技术的价值在于为安全防御提供先验知识,驱动补丁开发与入侵检测规则生成,同时也是渗透测试中验证风险的关键手段。应用场景涵盖软件开发生命周期安全测试、红蓝对抗演练及威胁情报分析。本文聚焦于实战闭环,详细拆解了 阅读详情

相关推荐

挖掘Linux内核漏洞:网络安全

通过静态分析、动态分析和模糊测试等方法,可以发现潜在的漏洞,并进一步加强网络安全。然而,需要注意的是,在进行漏洞挖掘时必须遵守法律和道德规范,并且仅在合法授权的环境中进行测试和研究,以确保网络安全的合法性和可持续性。Linux内核漏洞的挖掘是一项复杂而艰巨的任务,需要深入理解Linux内核的工作原理和相关的安全机制。通过仔细审查类似的代码段,可以发现其他潜在的漏洞。通过模糊测试,可以发送各种边界情况和异常输入,以发现可能导致漏洞的情况。然后,可以使用调试器(如GDB)对内核进行调试,以检测潜在的漏洞。

YtyVerilog的博客 348

gdb常用调试命令

gcc编译: #mermaid-svg-7RpKpE9xQibTrwmI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-7RpKpE9xQibTrwmI .error-icon{fill:#552222;}#mermaid-svg-7RpKpE9xQibTrwmI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-

非-浪的博客 827

从零搭建Arduino仿真开发环境:SimulIDE与IDE配置全攻略

本文详细介绍了如何从零搭建Arduino仿真开发环境,涵盖SimulIDE与Arduino IDE的配置全流程。通过仿真模拟环境,开发者可以零成本试错,快速验证电路设计和程序逻辑,特别适合初学者和便携开发需求。文章提供了软件安装、环境配置、项目实战及问题排查的完整指南,帮助读者高效掌握Arduino仿真开发技巧。

weixin_29284657的博客 518

Core analysis

Windows X64 core dump:Accelerated Disassembly, Reconstruction and Reversing Linux core dump:Accelerated Linux Core Dump Analysis All episode recordings are available on YouTube with descriptions: ...

awesomeray 245

RedHat 9 替换yum源镜像

引言:我们个人通常使用的红帽系统yum源是需要注册付费的,所以在使用yum源安装一些软件时无法正常安装(例如:MySQL),这时我们就需要将yum源替换为CentOS对应的源,以实现在红帽系统中正常安装软件。

YUJIAOZHU666的博客 3738

企业级Windows 10镜像封装实战:从规划到部署的完整指南

系统部署与镜像封装是企业IT运维中的核心基础技术,其原理在于通过创建预配置的系统模板,实现大规模计算机环境的快速、标准化部署。这项技术的核心价值在于将重复性手动操作转化为自动化流程,显著提升运维效率,保障环境一致性,并强化安全基线管理。在实际应用场景中,它尤其适用于新设备批量初始化、系统恢复和标准化环境构建。本文聚焦于Windows 10镜像的封装实践,深入探讨了使用Sysprep进行系统通用化处理以及通过DISM工具捕获WIM格式镜像的具体方法,为企业IT人员提供从零构建标准化系统镜像的完整路径。

weixin_33843947的博客 356

gdb-- help all, 方便 Ctrl + F

Command class: aliases ni -- Step one instruction rc -- Continue program being debugged but run it in reverse rni -- Step backward one instruction rsi -- Step backward exactly one instruction si -- S

dengzhaoqun的专栏 2475

rag综述——RAG技术发展流程、最新技术挑战与系统级优化

RAG技术发展综述:本文系统梳理了检索增强生成(RAG)技术的演进历程,从2017年开放域问答中的早期探索,到2020年正式提出RAG架构并与大模型深度融合,再到2025年向系统化、可信化和智能体化发展。当前RAG面临检索可靠性、系统效率和生成可信度三大核心挑战,解决方案包括领域自适应训练、强化语义编码、迭代检索策略等优化方向。未来RAG将向GraphRAG、SafeRAG等方向发展,从单纯性能优化转向构建可控、可审计的语言系统框架,成为高可靠大模型应用的基础设施。

lovehu6686的博客 1240

GDB调试实战指南:从入门到精通的调试技巧

.gdbinit 文件set $i = 0endendendendend# 使用自定义命令GDB不仅仅是一个调试器,更是一个强大的程序分析工具。掌握这些技巧能够:✅提高调试效率:快速定位和解决问题✅深入理解程序:查看运行时状态和内存布局✅自动化调试:通过脚本批量测试和分析✅性能分析:找出性能瓶颈和优化点记住,优秀的调试能力不仅仅是掌握工具,更重要的是培养系统化的调试思维和方法论。

苦哈哈的 C++ 程序员,写这个技术博客不是为了装逼,也不是为了立人设,是为了收割流量 1067

Zabbix 简介、优缺点、基础原理

(8条消息) Zabbix 的基础概念、原理和架构_Lee木木的博客-优快云博客_zabbix架构类型Zabbix 的基础概念、原理和架构_Lee木木的博客-优快云博客_zabbix架构类型 --------------------------------------------------------------------------------------------------------------------------- 一、Zabbix 简介 Zabbix是由A...

weixin_50196615的博客 2037

病理组学分析系列教程1:使用Python-histolab进行病理图像预处理,tiles切片自动生成

病理图像tiles自动生成,WSI图像预处理

qq_43449643的博客 1741

GDB之(3)加载指定动态库文件

GDB(GNU Debugger)是GNU开源组织发布的一个强大的Unix/Linux程序调试工具。在软件开发的调试阶段,GDB提供了程序员在程序暂停执行的情况下,查看和修改程序内部的功能。这对于跟踪错误和异常行为,在复杂的系统中尤为重要。当程序员面对的问题是需要调试的程序依赖特定版本的共享库文件时,GDB加载指定库文件的能力就变得尤为重要。通常,系统可能有多个版本的库文件,或者开发者可能希望测试程序在使用不同版本库文件时的行为。在这种情况下,GDB就需要能够加载和使用指定的库文件。

梅花香自苦寒来,宝剑锋从磨砺出。 3188

2025.06.06【Ribo-seq】|RiboCode:基于Ribo-seq数据的全基因组翻译ORF检测工具详解与实战流程

大家好!今天我们要学习的是RiboCode——一个专为Ribo-seq(核糖体足迹测序)数据设计的高质量翻译ORF(开放阅读框)检测工具。RiboCode能够帮助我们在全基因组范围内精准识别翻译事件,发掘经典CDS之外的uORF、dORF、重叠ORF等新型翻译本,极大拓展了我们对转录本翻译潜能的认知。RiboCode 是由清华大学杨学睿课题组开发的开源软件,支持Linux/Mac平台,采用Python实现。自动化流程:一条命令即可完成注释准备、P-site定位、ORF预测。高灵敏度与特异性。

1856

gdb在漏洞发掘中的使用

现在越来越多的人开始学习缓冲区溢出方面的原理和应用,这是一件好事,我们在使用别人写的Exploit去Hacker这儿Hacker那儿的时候,应该努力做到知其然,知其所以然。但是很多人在看了几篇即使是看上去很简单的栈溢出方面的文章后便敲起了退堂鼓,因为通篇大量gdb调试的命令和汇编代码让学习看上去变得枯燥无比,但是这方面知识的学习就是这样的。我写这篇文章的目的是总结一下在漏洞发掘中常用的一些gdb命...

weixin_30599769的博客 299

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

《模糊测试--强制发掘安全漏洞的利器》阅读笔记(一)

《模糊测试--强制发掘安全漏洞的利器》阅读笔记(一) 第一部分 本部分的主要目标是介绍开发“全功能”对模糊测试器所需要的基本思想。本部分的这些概念能让人更好的使用模糊测试技术。 重要知识点 白盒测试不见得比黑盒测试效率更高,因为编译器在将源代码编译成汇编代码时引入了巨大改变:例如微软源代码泄漏事件 黑盒测试适用于安全漏洞由单组输入引发的情况。需要多组输入时,基本只能通过手工的代码审评或...

weixin_30500473的博客 378

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

❤️超详细PWN新手入门教程❤️《二进制各种漏洞原理实战分析总结》

本部分将对常见的二进制漏洞做系统分析,方便在漏洞挖掘过程中定位识别是什么类型漏洞,工欲善其事,必先利其器。 0x01栈溢出漏洞原理 栈溢出漏洞属于缓冲区漏洞的一种,实例如下: #include <stdio.h> #include <string.h> int main() { char *str = "AAAAAAAAAAAAAAAAAAAAAAAA"; vulnfun(str); return; } int vulnfun(char *st

Test网络安全 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

《模糊测试--强制发掘安全漏洞的利器》阅读笔记(二)

《模糊测试--强制发掘安全漏洞的利器》阅读笔记(二) 第二部分 6-8章 主要讲了本地模糊测试的数据生成方法与原则,具体的模糊测试的方法,具体的模糊测试的工具 重要知识点 模糊测试的优点是自动化,自动化的生成可重现的测试用例。 注意生成模糊试探值的集合,并非是完备集 类UNIX的权限管理:用户,组,其他 普通知识点 自动化与数据生成 选择有效的编程语言,有用的构造块,合适的模糊值 ...

weixin_30795127的博客 180

ics-boomlab

你可能会好奇,我们为什么要学习逆向工程、学习汇编:作为科班CS学生,你需要知道自己写出来的程序到底会变成什么样子,到底如何运行,这样你才能知道如何写出更好的程序——正是这些底层的细节将科班程序员和培训班程序员区分开来。除了这些看起来很恶意的应用场景以外,逆向工程一个非常重要的作用就是帮助白帽黑客们找到程序的漏洞,发掘程序的安全问题。在学习C或C++的文件操作的时候,会发现一个很巧的事情——文件读写用到的API,和标准输入输出用的那些API其实都差不多,这是因为文件和标准输入输出本来就是一样的。

qq_46895011的博客 1264

【学习笔记】CTF PWN选手的养成(一)

在ichunqiu上看的视频,对学习内容进行整理,对Atum老师表示感谢。 第一章 基础知识 0X01 PWN 简介 软件安全:软件安全专注于研究软件的设计和实现的安全 研究对象:代码(源码、字节码、汇编等) 研究目标:发掘漏洞、利用漏洞、修补漏洞 研究技术:逆向工程、漏洞挖掘与利用、漏洞防御技术 CTF PWN:软件安全研究的一个缩影 研究对象:可执行文件,主要是ELF文件 研究...

prettyX的博客 2380

探索调试新境界:binjatron——Binary Ninja与Voltron的完美交融

探索调试新境界:binjatron——Binary Ninja与Voltron的完美交融 在软件逆向和调试的世界里,信息的实时同步和高效交互至关重要。今天,我们为您介绍一款强大的插件——binjatron,它实现了Binary Ninja与Voltron的强大整合,为开发者和安全研究人员打开了全新的工作流可能性。 项目介绍 binjatron,作为连接Binary Ninja和Voltron的桥梁...

gitblog_01060的博客 351

Radare2项目常见问题解决方案

Radare2 是一个开源的、跨平台的逆向工程框架。它最初是为GNU/Linux设计的,但后来扩展支持了多种操作系统,包括但不限于 *BSD、Windows、OSX、Android、iOS、Solaris 和 Haiku。Radare2 主要使用C语言编写,其功能十分全面,包括但不限于: - 反汇编和汇编多种架构代码 - 本地与远程调试(支持gdb、rap、r2pipe等) - 文件系统取证和数

gitblog_01133的博客 1209

AFL++实战入门与afl-fuzz流程解析(源码流程图)

本项目为模糊测试的零基础教学,适合了解 pwn 且会使用 Linux 的 gcc、gdb 的读者。模糊测试旨在通过向程序投喂数据使其崩溃,从而获取崩溃样本以寻找程序漏洞。本文前半部分介绍 AFL++ 的 docker 环境配置,帮助读者解决入门时的环境和网络问题;后半部分全面解析 afl 的模糊测试流程与源码架构,包括漏洞挖掘实战和原理机制解析。通过本文,读者可以快速入门模糊测试,并深入了解 AFL++ 的工作原理和应用。一、AFL++的docker环境配置二、AFL++进行漏洞挖掘实战。

一个啥也不会的小菜鸡! 2322

Phrack安全杂志:详细分析堆栈溢出Smashing The Stack For Fun And Profit(Aleph One) 关于粉碎堆栈的秘密

致敬:Aleph One 原文首发于Phrack,这是全球第一篇讲述堆栈漏洞的文章,里面提供了学习二进制安全的方法和基础理论知识,详细的描述了栈溢出的原理是什么?这里首次提到function prolouge 和 function epilogue,什么是Stack ?什么是Bufferoverflow?本文献给所有安全行业的研究者和贡献者,由于译者水平有限,翻译与原文内容稍有不同,请谅解。博主希望用质朴的语言展示二进制安全技术,让二进制安全进入大众视野。本文的实例全部可以在Linux平台上复现出来,文章.

「鸿渐之翼」的博客 1478

IoT 安全-逆向入门介绍

含义:把抽象的设计/需求变成实际的产品或系统的过程。例子:从产品设计图纸 → 交给裁缝/工程师 → 得到衣服/实物;或需求规格 → 程序员编写代码 → 得到软件/网站(如淘宝)。特点:从逻辑/需求出发,逐步实现为物理/可执行产物。

rasssel的博客 1291
上一篇: 堆栈溢出从入门到提高
下一篇: 用GDB调试程序
codeshell
博客等级 码龄22年 9粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值