ida的使用
一.ida的基本设置
在IDA的安装根目录下有许多文件夹,各个文件夹存储不同的内容
1.目录结构
cfg:包含各种配置文件,基本IDA配置文件ida.cfg,GUI配置文件idagui.cfg,文本模式用户界面配置文件idatui.cfg,
idc:包含IDA内置脚本语言IDC所需要的核心文件
ids:包含一些符号文件
loaders:包含用于识别和解析PE或者ELF
plugins:附加的插件模块
procs:包含处理器模块
2.启动
启动ida后会出现这样一个对话框
New:启动一个标准的File Open对话框,让你选择,根据选择的文件,ida将显示外一个或多个对话框,再选择特定的文件分析选项。然后加载,分析并显示。
Go:打开一个空白工作区,这时只需把二进制文件直接拖入到IDA工作区,可以将二进制文件直接拖入,或使用file菜单中的选项。IDA会利用已知扩展名的过滤器限制file对话框显示。请确保修改或清除该过滤器【如选择all files】,以便file对话框正确显示你想要打开的文件【在非windows系统中,可执行文件可能没有扩展名】。以这种方式打开文件时,IDA会尝试自动识别选定文件类型,需要注意loading对话框,看ida用哪个加载器处理。
Previous:打开最近用过的文件中一个文件,“最近用过的文件”列表中包含IDA的windows注册表项的history子项中的值。默认长度为10,可以编辑idagui.cfg或idatui.cfg修改其值。
3.文件加载
拖入文件后,会弹出一个加载对话框,如果未识别文件,则默认为Binary File为唯一选项,这时就需要你手动选择反汇编处理器了
文件类型列表,列表中将显示最适合处理选定文件的 IDA 加载器
IDA 通过执行 loaders 目录中的每一个文件加载器,来确定能够识别新文件的加载器,从而建立了这个列表
上图中 Windows PE 加载器(pe.ldw)和 MS-DOS EXE 加载器(dos.ldw)均声称它们能够识别选定的文件,因为 PE 文件格式是 MS-DOS EXE 文件格式的扩展形式
Binary File(二进制文件)是这个列表中的最后一个选项,它会一直显示,因为它是 IDA 加载无法识别的文件的默认选项,它提供了最低级的文件加载方法
如果只有 Binary File,这表明没有加载器能够识别选定的文件
Processor Type(处理器类型)下拉菜单中可以指定在反汇编过程中使用的处理器模块(在 IDA 的 procs 目录中)
多数情况下,IDA 将根据它从可执行文件的头中读取到的信息,选择合适的处理器
如果 IDA 无法正确确定与所打开的文件关联的处理器类型,在继续文件加载操作前,需要手动选择一种处理器类型
Loading Segment(加载段),Loading Offset(加载偏移量),如果同时选择了二进制文件输入格式和一种 x86 系列处理器,Loading Segment 和 Loading Offset 字段将处于活动状态
由于二进制加载器无法提取任何内存布局信息,在这里输入的段和偏移量值将共同构成所加载文件内容的基址
在最初的加载过程中,如果忘记指定基址,可以在任何时候使用 Edit -> Segments -> Rebase Program 命令来修改 IDA 镜像的基址
Kernel Options(核心选项)用于配置特定的反汇编分析选项,IDA 可利用这些选项改进递归下降过程
绝大多数情况下,默认选项提供的都是最佳的反汇编选项
Processor Options(处理器选项)用来选择适用于选中的处理器模块的配置选项,但它不一定对每个处理器模块有效
其他选项复选框可帮助用户更好地控制文件加载过程
二、界面介绍
1.选项卡顶部 IDA 用不同的颜色区分可执行程序组成部分。下方对不同颜色
代表的部分进行说明。例如,灰色代表.data sectio【数据】,如果点击颜色
条灰色部分,下方的图形视图也会跳转到该部分中点击地址的位置。粉色部分是
External Symbol【外部符号】或者 idata section。蓝色部分表示 code section【代码】中识别出的函数。
2.在 IDA 界面底部有一个交互栏可以执行 Python 命令,能够帮助我们快速进行进制转换以及命令
总的来说就是大窗口是文本结构界面,可以看到明显的条件判断,红色为条件为false,绿色条件为true。蓝色为无条件跳转
按下space(空格键),会进入文本结构的界面,也就是上面图片的反汇编主窗口所显示的,当打开ida是流程图(ctrl+滑动滚轮=变大|变小)时,可以使用空格显示文本结构
三.ida快捷键记录
常用快捷键
IDA
中的快捷键都是和菜单栏的各个功能选项一一对应的,基本上你只要能在菜单栏上找到某个功能,也就能看到相应的快捷键,这里记录几个常用的:
a:将数据转换为字符串
f5:一键反汇编
esc:回退键,能够倒回上一部操作的视图(只有在反汇编窗口才是这个作用,如果是在其他窗口按下esc,会关闭该窗口)
shift+f12:可以打开string窗口,一键找出所有的字符串,右击setup,还能对窗口的属性进行设置
ctrl+w:保存ida数据库
ctrl+s:选择某个数据段,直接进行跳转 ctrl+鼠标滚轮:能够调节流程视图的大小
x:对着某个函数、变量按该快捷键,可以查看它的交叉引用
g:直接跳转到某个地址
n:更改变量的名称
y:更改变量的类型
/:在反编译后伪代码的界面中写下注释
\:在反编译后伪代码的界面中隐藏/显示变量和函数的类型描述,有时候变量特别多的时候隐藏掉类型描述看起来会轻松很多
;:在反汇编后的界面中写下注释
ctrl+shift+w:拍摄IDA快照
u:undefine,取消定义函数、代码、数据的定义
Navigate
Ctrl+L: 所有名字的选择器
G: 跳转到某个地址,或者输入label也可以
X: 查看谁调用了当前选中的函数、变量
书签
Alt+M: 添加书签
Ctrl+M: 查看书签
Alt+T:搜索内容
Ctrl+T:继续查找下一个
空格:切换视图(文本视图,图形视图)
Tab,F5:反编译
自动注释:option->general->auto comments
注释,变量名
冒号:单行注释
insert:行前注释
N:增加、修改变量名
数据转换
Edit->operand type
Q: 十六进制
H:十进制
R: 字符
A:普通字符串
Alt+D: 选择Q word或者TByte
Alt+A:字符串(C或者pascal格式)
选中,按C,标记为code
选中,按U,取消
偏移(Offset)
O,Ctrl+O:改为偏移label
Ctrl+R:相对偏移
M:改为符号常量
新建结构体
shift+f1,按insert,新建C语言结构体,双击后修改各个element的数据格式(sync, yes)
H:十进制
Q:十六进制
A:字符串
T:把偏移改为结构体
Alt+Q:修改数据类型为结构体类型
数组
星号,新建数组
Alt+L,批量选择(选择后,再按星号,改为数组)
函数
Y:修改函数header
四、操作简介
函数操作
删除函数:函数窗口中选中函数后,按 Delete 键
定义函数:在反汇编窗口选中对应行后,按P键
修改函数参数:在函数窗口中选中并按 Ctrl+E 组合键,或在反汇编窗口的函数内部按 Alt+P 组合键
数据类型操作
U 键:取消一个地方已有的数据
D 键:让某一个位置变成数据
C 键:让某一个位置变成指令
A 键:会以该位置为起点定义一个以“\0”结尾的字符串类型
* 键:此处定义为一个数组
O 键:将此处定义为一个地址偏移
导航操作
后退到上一位置:Esc
前进到下一位置:Ctrl+Enter
跳转到某一个特定位置:G,然后可以输入地址/已经定义的名称
跳转到某一区段:Ctrl+S,然后选择区段即可
简要概括
ida.exe用于分析32位的可执行文件
ida64.exe用于分析64位的可执行文件
如何判断文件位数
1.kali linux系统终端的file命令或者检查是否有保护机制时的checksec命令
2.或者最直接的方法用ida.exe打开64位的程序会报错(但是ida.64可以正常打开32位的程序,但是反编译得不到伪代码)
窗口介绍
1.函数列表窗口:列举所有已经被IDA识别的函数
2.IDA-View窗口:汇编代码窗口,空格键切换图形模式和文本模式,Tab和F5键切换到伪代码窗口
3.Pseudocode窗口:伪代码窗口,在伪代码位置按下Tab键可以切换到对应的汇编窗口
4.字符串窗口:列举程序代码所有引用到的字符串常量
a.shift + F12打开字符串窗口
b.Ctrl + F 可以弹出底部搜索小窗口(大部分窗口均可实现该功能)
5.其他窗口:HEX View,Exports,Imports ,Structures
6.菜单项View菜单可以找到IDA绝大部分窗口的入口
五、做题中ida的作用
这里以BUUCTF上的rip为例,说一下怎么通过ida看程序,并且找到我们需要的东西
下载附件后先将程序拖到Ubuntu中查看位次,这里我用的是checksec,还可以检查是否有保护机制
同样可以使用file查看,只是这种方式不能看保护机制,对于pwn题来说还是checksec方便一些,一举两得
知道后用对应的ida打开,这里是64位,也就是说用ida x64.exe打开
然后找到main函数,main函数在程序中很重要,F5反汇编后可以看到C语言代码,会发现这里出现了之前提到过的栈溢出危险函数gets
补充:
在可执行文件的所有符号中,main函数是一个很特别的函数,对C/C++程序开发人员来说,main函数是整个程序的起点;但是,main函数却不是程序启动后真正首先执行的代码。
接着可以在main函数下的fun函数中看到后门system("/bin/sh"),那么这里我们就可以猜测应该是利用gets函数获取一个长字符串覆盖rip来控制程序流到fun()函数,然后利用后门shell得到flag
函数的局部变量会存放在他的栈中,那么在main函数中,我们双击s变量,查看s分配了多少空间,可以看到用了15个字节的储存空间,前面说过rbp在64位程序中是8个字节
那么还需要8个字节的数据把rbp的数据填满,这样就可以溢出进入Return Address了
Address(返回地址),也就是说是fun函数的地址,直接查看fun函数地址可以看到是0x401186
from pwn import *# 假设你的二进制文件名为 pwn1,并且它位于当前工作目录中
binary_path = './pwn1'# 使用 process 函数启动本地二进制文件
p = process(binary_path)# 定义你的 payload
# 这里假设溢出发生在栈上,且返回地址的偏移量为 16+8=24 字节
payload = b'a' * 15 + b'a' * 8
payload += p64(0x401186) # 假设这是你想要利用的地址# 发送 payload 到二进制文件
p.send(payload)# 进入交互模式,允许你手动输入和观察输出
p.interactive()
这就是本题的exp,现在用的是本地调试,一般本地成功了才会远程连接
我简单总结了一下,这种栈溢出的有后门的入门题目思路,但是肯定不全,每道题目肯定会有它的不一样之处:
1.完整后门&溢出长度大于等于ip
在有完整可用后门的情况下,只要溢出长度能够覆盖ip即可
2.残缺后门&溢出长度远大于ip
这里指的远大于ip,意思是可以溢出覆盖除了ip以外的3个以上的(一般情况,实际情况实际分析)机器字长(32位4 bit;64位8bit)。残缺后门的形式多种多样:提供诸如system等关键函数;flag、/bin/sh等字符串;某些gadget等
提供关键函数&字符串
一般给出的是system函数,在ida中一般呈现形式是这样的,这样就能通过system.plt调用system函数。
字符串/bin/sh可以在ida中字符串界面可以查询到(shift+f12),存放在bss区,在源码中通过定义变量来提供。通过地址来调用这个字符串参数。
int getshell()
{
return system("echo no no no!!!");
}
对比完整后门发现这里是将函数和参数分割,但是两者都在程序中,所以可以通过栈溢出自行构造完整后门,这里就涉及传参方式方面知识:32位栈传参;64位前6个参数寄存器传参,后续更多参数遵循栈传参。
自行构造完整后门(调用链)对溢出长度有要求了,至少要能溢出除ip以外再多2个机器字长,用于写入调用步骤。
自行构造完整后门(调用链)对溢出长度有要求了,至少要能溢出除ip以外再多2个机器字长,用于写入调用步骤
32位
payload=[填充]+[system@plt]+[4bit填充]+[参数]
64位
64位系统寄存器传参需要用到gadget,可以使用ROPgadget查找程序乃至libc库(需要泄露基地址)。一般来说前两个参数rdi rsi的gadget比较常见容易得到的。
payload=[填充]+[pop_rdi_ret]+[参数]+[system@plt]
提供关键函数
关键函数不单单指的system、puts、read、write等用于写入读取的辅助函数一定程度上也算是关键函数,但是为了方便总结这里的关键函数指的是system这类函数
system函数在ida中呈现方式同上小结。与上面小结相比缺少的是字符串/bin/sh,对比完整后门来说就只剩下system
这里结合上面小结对比缺少一个/bin/sh,那就先构造一个输入的利用链将字符串输入到内存,然后再和上面一样构造system利用链,这里就涉及ROP利用思想。system利用链不再重复,与上面小结一致。输入利用链构根据题目出现输入函数不同而实际分析,一般用的都是read,也有scanf、gets
根据溢出长度不同还能细分为两种情况:一次性利用链;ROP利用链。
一次性利用链
这种情况适用于溢出长度比较大,一般能有7个机器字长左右,具体情况具体分析。这种利用的思想是用输入函数read将/bin/sh写入到bss段后调用system('/bin/sh')
32位
payload=[填充]+[read@plt]+[system@plt]+[参数1]+[binsh写入地址]+[参数3]+[binsh写入地址]
64位很少用,因为寄存器传参需要用到gadget,这样会导致需要非常大的溢出空间,构造起来和32位一样,这里就不写了
ROP利用链
和一次性利用链思想上最大区别就是运行完自构写入函数后,返回main(或其他)函数,相当于让程序重新运行一次,有第二次利用漏洞机会,写入getshell利用链。
相比之下优势:payload长度变短,有效应对溢出长度不足情况。
32位
payload1=[填充]+[read@plt]+[main]+[参数1]+[binsh写入地址]+[参数3]
payload2=[填充]+[system@plt]+[4bit填充]+[binsh写入地址]
64位
pop_rdi都会有单独的gadget,rsi多数以pop_rsi_r15形式出现,rdx少有gadget,这里写的是gadget情况如下,做题时不一样的情况还需要调整
- pop_rdi_ret
- pop_rsi_r15_ret
- pop_rdx_ret
payload1=[填充]+[pop_rdi]+[参数1]+[pop_rdi_r15]+[binsh写入地址]+[8bit填充]+[pop_rdx]+[参数3]+[read@plt]
payload2=[填充]+[pop_rdi]+[binsh写入地址]+[system@plt]
可以看到payload1还是长的,而且rdx gadget不一定有。这时可以尝试不传第三个参数,用寄存器rdx的原值,这个值有可能符合需要(若需要控制前三个参数了解一下ret2csu),payload简化如下
payload1=[填充]+[pop_rdi]+[参数1]+[pop_rdi_r15]+[binsh写入地址]+[8bit填充]+[read@plt]
payload2=[填充]+[pop_rdi]+[binsh写入地址]+[system@plt]
相关文章:
ida的使用
一.ida的基本设置 在IDA的安装根目录下有许多文件夹,各个文件夹存储不同的内容 1.目录结构 cfg:包含各种配置文件,基本IDA配置文件ida.cfg,GUI配置文件idagui.cfg,文本模式用户界面配置文件idatui.cfg, idc:包含…...
archery docker安装
#下载Archery-1.11.3.tar.gz https://codeload.github.com/hhyo/Archery/tar.gz/refs/tags/v1.11.3 cd /root tar -zxvf Archery-1.11.3.tar.gz cd /root/Archery-1.11.3/src/docker-compose #启动 docker compose -f docker-compose.yml up -d#表结构初始化 docker exec -ti a…...
【zookeeper核心源码解析】第四课:客户端与服务端读写的io核心流程
系列文章目录 【zookeeper核心源码解析】第一课:zk启动类核心流程序列图 【zookeeper核心源码解析】第二课:俯瞰QuorumPeer启动核心流程,实现选举关键流程 【zookeeper核心源码解析】第三课:leader与follower何时开始同步&#…...
影刀进阶指令 | Kimi (对标ChatGPT)
文章目录 影刀进阶指令 | Kimi (对标ChatGPT)一. 需求二. 流程三. 实现3.1 流程概览3.2 流程步骤讲解1\. 确定问题2\. 填写问题并发送3\. 检测答案是否出完 四. 运维 影刀进阶指令 | Kimi (对标ChatGPT) 简单讲讲RPA调用kimi实现…...
Linux第99步_Linux之点亮LCD
主要学习如何在Linux开发板点亮屏,以及modetest命令的实现。 很多人踩坑,我也是一样。关键是踩坑后还是实现不了,这样的人确实很多,从群里可以知道。也许其他人没有遇到这个问题,我想是他运气好。 1、修改设备树 1)、…...
【C++决策和状态管理】从状态模式,有限状态机,行为树到决策树(三):基于BT行为树实现复杂敌人BOSS-AI
前言 (题外话)nav2系列教材,yolov11部署,系统迁移教程我会放到年后一起更新,最近年末手头事情多,还请大家多多谅解。回顾我们整个学习历程,我们已经学习了很多C的代码特性,也学习了很多ROS2的跨…...
SpringCloudAlibaba技术栈-Higress
1、什么是Higress? 云原生网关,干啥的?用通俗易懂的话来说,微服务架构下Higress 就像是一个智能的“交通警察”,它站在你的网络世界里,负责指挥和调度所有进出的“车辆”(也就是数据流量)。它的…...
《信息传播:人工智能助力驱散虚假信息阴霾》
在信息爆炸的时代,虚假信息和谣言如同脱缰野马,肆意传播,对社会秩序和公众生活造成了严重影响。人工智能作为一种强大的技术工具,正逐渐成为信息传播的有力助手,为防止虚假信息和谣言扩散提供了新的途径。 虚假信息和…...
玩客云v1.0 刷机时无法识别USB
v1.0刷机时公对公插头掉了,刷机失败,再次刷机,一直提示无法识别的USB设备,此时LED一直不亮,就像是刷成砖了一样,查了好多文章最后发现正面还有一个地方需要短接。 背面的短接点 【免费】玩客云刷机包s805-…...
STM32F103RCT6学习之五:ADC
1.ADC基础 ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁12位逐次逼近型ADC,1us转换时间 输入电压范围:0~3.3Vÿ…...
通过Cephadm工具搭建Ceph分布式存储以及通过文件系统形式进行挂载的步骤
1、什么是Ceph Ceph是一种开源、分布式存储系统,旨在提供卓越的性能、可靠性和可伸缩性。它是为了解决大规模数据存储问题而设计的,使得用户可以在无需特定硬件支持的前提下,通过普通的硬件设备来部署和管理存储解决方案。Ceph的灵活性和设计…...
flink+kafka实现流数据处理学习
在应用系统的建设过程中,通常都会遇到需要实时处理数据的场景,处理实时数据的框架有很多,本文将以一个示例来介绍flinkkafka在流数据处理中的应用。 1、概念介绍 flink:是一个分布式、高可用、高可靠的大数据处理引擎,…...
SpringBoot使用外置的Servlet容器(详细步骤)
嵌入式Servlet容器:应用打成可执行的jar 优点:简单、便携; 缺点:默认不支持JSP、优化定制比较复杂.; 外置的Servlet容器:外面安装Tomcat---应用war包的方式打包; 操作步骤: 方式一&…...
C# 中的委托与事件:实现灵活的回调机制
C#中的委托(Delegate)和事件(Event)。委托和事件是C#中非常重要的特性,它们允许你实现回调机制和发布-订阅模式,从而提高代码的灵活性和解耦程度。通过使用委托和事件,你可以编写更加模块化和可…...
大模型辅助测试的正确打开方式?
测试的基本目的之一,是对被测对象进行质量评估。换言之,是要提供关于被测对象质量的“确定性”。因此,我们很忌讳在测试设计中引入“不确定性”,比如采用不可靠的测试工具、自动化测试代码逻辑复杂易错、测试选择假设过于主观等等…...
设计模式之代理模式
代理模式代码示例:https://blog.csdn.net/weixin_39865508/article/details/141924680 代理模式的左右,一定程度上不暴露被代课对象的内容,更安全,也减少系统的耦合性 静态代理 代理对象和被代理对象都继承同一个接口 在代理对象…...
win11中win加方向键失效的原因
1、可能是你把win键锁了: 解决办法:先按Fn键,再按win键 2、可能是可能是 贴靠窗口设置 中将贴靠窗口关闭了,只需要将其打开就好了...
Html——11. 页面跳转
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>页面跳转</title><meta http-equiv"refresh" content"5; urlhttps://www.51zxw.net"/><!--<meta http-equiv"refresh" co…...
要查询 `user` 表中 `we_chat_open_id` 列不为空的用户数量
要查询 user 表中 we_chat_open_id 列不为空的用户数量,你可以使用以下 SQL 查询语句: SELECT COUNT(*) FROM user WHERE we_chat_open_id IS NOT NULL AND we_chat_open_id ! ;解释: SELECT COUNT(*): 表示要计算符合条件的行数。FROM us…...
docker-compos mysql5.7主从配置
docker-compos mysql5.7主从配置 docker-compose目录结构 配置文件 master/my.cnf [client] port 3306 socket /var/run/mysqld/mysqld.sock[mysqld_safe] pid-file /var/run/mysqld/mysqld.pid socket /var/run/mysqld/mysqld.sock nice 0…...
关于无线AP信道调整的优化(锐捷)
目录 一、信道优化的基本原则二、2.4G频段信道优化三、5G频段信道优化四、信道优化代码具体示例五、其他优化措施 一、信道优化的基本原则 信道优化旨在减少信道间的干扰,提高网络覆盖范围和信号质量。基本原则包括: 1. 选择合适的信道:根据…...
Flask入门一(介绍、Flask安装、Flask运行方式及使用、虚拟环境、调试模式、配置文件、路由系统)
文章目录 一、Flask介绍二、Flask创建和运行 1.安装2.快速使用3.Flask小知识4.flask的运行方式 三、Werkzeug介绍四、Jinja2介绍五、Click CLI 介绍六、Flask安装 介绍watchdog使用python–dotenv使用(操作环境变量) 七、虚拟环境 介绍Mac/linux创建虚拟…...
解决Docker国内网络问题
6月后以来,大量Docker镜像网站停服,Docker无法下载安装 本仓库致力于解决国内网络原因无法使用Docker的问题。 特点: 使用Github Action将官网的安装脚本/安装包定时下载到本项目Release,供国内使用官方安装包,安全可…...
Anaconda 安装与虚拟环境创建完整指南
Anaconda 安装与虚拟环境创建完整指南 Anaconda 是目前最流行的 Python 和数据科学工具集之一,它不仅可以轻松管理 Python 包,还能提供强大的虚拟环境功能,避免项目之间的依赖冲突。如果你是机器学习、数据科学或计算机视觉的开发者…...
【Java数据结构】LinkedList与链表
认识LinkedList LinkedList就是一个链表,它也是实现List接口的一个类。LinkedList就是通过next引用将所有的结点链接起来,所以不需要数组。LinkedList也是以泛型的方法实现的,所以使用这个类都需要实例化对象。 链表分为很多种,比…...
Linux 搭建 nginx+keepalived 高可用 | Nginx反向代理
注意:本文为 “Linux 搭建 nginxkeepalived (主备双主模式) 高可用 | Nginx反向代理” 相关文章合辑。 KeepalivedNginx实现高可用(HA) xyang0917 于 2016-09-17 00:24:15 发布 keepalived 的 HA 分为抢占模式和非抢占模式,抢占…...
17_HTML5 Web 存储 --[HTML5 API 学习之旅]
HTML5 Web 存储(Web Storage)是 HTML5 引入的一种在用户浏览器中存储数据的机制。它提供了比传统的 cookies 更加方便和强大的功能,包括更大的存储空间、更好的性能以及更简单的 API。Web 存储主要分为两种类型:localStorage 和 s…...
uni-app(优医咨询)项目实战 - 第7天
学习目标: 能够基于 WebSocket 完成问诊全流程 能够使用 uniCloud 云存储上传文件 能够完成查看电子处方的功能 能够完成医生评价的功能 一、问诊室 以对话聊天的方式向医生介绍病情并获取诊断方案,聊天的内容支持文字和图片两种形式。 首先新建一…...
今日总结 2024-12-28
今天全身心投入到鸿蒙系统下 TCPSocket 的学习中。从最基础的 TCP 协议三次握手、四次挥手原理重新梳理,深刻理解其可靠连接建立与断开机制,这是后续运用 TCPSocket 无误通信的根基。在深入鸿蒙体系时,仔细研读了其为 TCPSocket 封装的 API&a…...
ip归属地怎么判定?如何查看自己ip属地
在当今数字化时代,IP地址作为互联网通信的基础,扮演着至关重要的角色。而IP归属地的判定与查看,不仅关乎网络安全、隐私保护,还直接影响到社交平台的信任机制与信息传播的真实性。本文将深入探讨IP归属地的判定原理以及如何查看自…...
4.采用锁操作并支持等待功能的线程安全队列
分析 书接上文 修改push()似乎并不困难:在函数末尾加上对data_cond.notify_one()的调用即可,与代码清单1(第一篇文章)一样。事情其实没那么简单,我们之所以采用精细粒度的锁,目的是尽可能提高并发操作的数量。如果在notify_one()调用期间&a…...
螺杆支撑座在运用中会出现哪些问题?
螺杆支撑座是一种用于支撑滚珠螺杆的零件,通常用于机床、数控机床、自动化生产线等高精度机械设备中。在运用中可能会出现多种问题,这些问题源于多个方面,以下是对可能出现的问题简单了解下: 1、安装不当:安装过程中没…...
OSI 七层模型 | TCP/IP 四层模型
注:本文为 “OSI 七层模型 | TCP/IP 四层模型” 相关文章合辑。 未整理去重。 OSI 参考模型(七层模型) BeretSEC 于 2020-04-02 15:54:37 发布 OSI 的概念 七层模型,亦称 OSI(Open System Interconnection…...
秒鲨后端之MyBatis【2】默认的类型别名、MyBatis的增删改查、idea中设置文件的配置模板、MyBatis获取参数值的两种方式、特殊SQL的执行
别忘了请点个赞收藏关注支持一下博主喵!!!! ! ! 下篇更新: 秒鲨后端之MyBatis【3】自定义映射resultMap、动态SQL、MyBatis的缓存、MyBatis的逆向工程、分页插件。 默认的类型别名 MyBatis的增删改查 添加 <!--int insertUs…...
快云服务器小助手getdetail存在任意文件文件读取漏洞
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
尚硅谷Vue3入门到实战 —— 02 编写 App 组件
根目录下的 index.html 是项目的入口文件,默认的具体内容如下: src 文件夹分析 <!DOCTYPE html> <html lang""><head><meta charset"UTF-8"><link rel"icon" href"/favicon.ico"&…...
Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J实现原理分析
文章目录 官网SLF4J 简单使用案例分析SLF4J 获取 Logger 的原理获取 ILoggerFactory 的过程获取 Logger 的过程SLF4J 与底层日志框架的集成 小结 官网 https://slf4j.org/ Simple Logging Facade for Java (SLF4J) 用作各种日志记录框架(e.g…...
Flutter 调试环境下浏览器网络请求跨域问题解决方案
本篇文章主要讲解,Flutter调试环境情况下,浏览器调试报错跨域问题的解决方法,通过本篇文章你可以快速掌握Flutter调试环境情况下的跨域问题。 日期:2024年12月28日 作者:任聪聪 报错现象: 报文信息…...
python编译为可执行文件
1.用py2exe生成可执行文件 目前,在py2exe 0.9.2版本已经支持python3.x,它可以将python程序打包为windows下独立的可执行文件。 要使用py2exe,首先要编写一个编译程序(例如编写一个名为setup.py的程序),然后在python中运行…...
【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版 (1)111
文章目录 一、算法概念111二、算法原理(一)感知机(二)多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点(一)优点(二)缺点 四、MLP分类任务…...
spring cloud微服务-OpenFeign的使用
OpenFeign的使用 openFeign的作用是服务间的远程调用 ,比如通过OpenFeign可以实现调用远程服务。 已经有了LoadBalancer为什么还要用openFeign? 在微服务架构中,LoadBalancer和OpenFeign虽然都提供了服务间调用的能力,但它们的设计目的和…...
欢迪迈手机商城设计与实现基于(代码+数据库+LW)
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本欢迪迈手机商城就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…...
GCP Cloud Architect exam - PASS
备考指南 推荐视频课程 https://www.udemy.com/course/google-cloud-architect-certifications/?couponCodeKEEPLEARNING 推荐题库 https://www.udemy.com/course/gcp-professional-cloud-architect-exam-practice-tests-2024/?couponCodeKEEPLEARNING 错题集 http…...
通过 `@Configuration` 和 `WebMvcConfigurer` 配置 Spring MVC 中的静态资源映射
通过 Configuration 和 WebMvcConfigurer 配置 Spring MVC 中的静态资源映射 一、前言1. 了解静态资源的默认配置2. 使用 Configuration 和 WebMvcConfigurer 自定义资源映射示例:将 /upload/ 和 /img/ 映射到不同的文件系统目录解释:为什么使用 classpa…...
敏捷测试文化的转变
敏捷文化是敏捷测试转型的基础,只有具备敏捷文化的氛围,对组织架构、流程和相关测试实践的调整才能起作用。在前面的敏捷测试定义中,敏捷测试是遵从敏捷软件开发原则的一种测试实践,这意味着敏捷的价值观。 此外,从传…...
深度学习:从原理到搭建基础模型
引言: 深度学习为什么火? 深度学习在处理复杂的感知和模式识别任务方面展现出了前所未有的能力。以图像识别为例,深度学习模型(如卷积神经网络 CNN)能够识别图像中的各种物体、场景和特征,准确率远超传统的计算机视觉方法。 当然这之中也还因为 大数据时代的推动(随着…...
MySQL和HBase的对比
Mysql :关系型数据库,主要面向 OLTP ,支持事务,支持二级索引,支持 sql ,支持主从、 Group Replication 架构模型(此处以 Innodb 为例,不涉及别的存储引擎)。 HBase &am…...
Gateway Timeout504 网关超时的完美解决方法
引言 在Web开发中,遇到HTTP状态码504(Gateway Timeout)是相当常见的。这个状态码表示前端服务器(如负载均衡器或代理服务器)作为网关工作时,在尝试访问后端服务器处理请求时未能及时得到响应。本文将探讨导…...
【探花交友】day03—MongoDB基础
目录 课程介绍 1、通用设置 1.1 需求分析 1.2 查询通用设置 1.2 陌生人问题 1.3 通知设置 1.4 黑名单管理 2、MongoDB简介 1.1、MongoDB简介 1.2、MongoDB的特点 1.3 数据类型 3、MongoDB入门 2.1、数据库以及表的操作 2.2、新增数据 2.3、更新数据 2.4、删除数…...
总结-常见缓存替换算法
缓存替换算法 1. 总结 1. 总结 常见的缓存替换算法除了FIFO、LRU和LFU还有下面几种: 算法优点缺点适用场景FIFO简单实现可能移除重要数据嵌入式系统,简单场景LRU局部性原理良好维护成本高,占用更多存储空间内存管理,浏览器缓存L…...