首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在elf中查看libc函数的程序集

在elf中查看libc函数的程序集,可以通过以下步骤进行:

  1. 确定目标elf文件:首先,需要确定要查看的目标elf文件,该文件包含了程序的可执行代码和相关的库函数。
  2. 安装调试工具:为了查看程序集,需要安装一个适当的调试工具。在Linux系统中,常用的调试工具是GDB(GNU调试器)。可以使用以下命令安装GDB:
  3. 安装调试工具:为了查看程序集,需要安装一个适当的调试工具。在Linux系统中,常用的调试工具是GDB(GNU调试器)。可以使用以下命令安装GDB:
  4. 启动GDB:打开终端,进入目标elf文件所在的目录,并执行以下命令启动GDB:
  5. 启动GDB:打开终端,进入目标elf文件所在的目录,并执行以下命令启动GDB:
  6. 设置断点:在GDB中,可以设置断点来暂停程序的执行,以便查看程序集。可以使用以下命令在目标函数上设置断点:
  7. 设置断点:在GDB中,可以设置断点来暂停程序的执行,以便查看程序集。可以使用以下命令在目标函数上设置断点:
  8. 运行程序:执行以下命令运行程序:
  9. 运行程序:执行以下命令运行程序:
  10. 查看程序集:当程序执行到断点处时,GDB会暂停程序的执行。可以使用以下命令查看当前断点处的程序集:
  11. 查看程序集:当程序执行到断点处时,GDB会暂停程序的执行。可以使用以下命令查看当前断点处的程序集:
  12. 这将显示当前函数的程序集指令列表。
  13. 继续执行程序:如果想继续执行程序,可以使用以下命令:
  14. 继续执行程序:如果想继续执行程序,可以使用以下命令:

以上是在elf中查看libc函数的程序集的基本步骤。对于不同的libc函数,可以重复设置断点和查看程序集的步骤来获取更多信息。

对于腾讯云相关产品和产品介绍链接地址,可以参考腾讯云官方文档或咨询腾讯云客服获取更详细的信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ROP-Ret2libc学习

利用原理 ​ ret2libc这种攻击方式主要是针对动态链接编译程序,因为在正常情况下,程序是找不到system() execve()这种系统函数(如果有这些系统函数程序就可以直接控制返回地址指向他们...,就不用再通过这麻烦方法了) ​ 因为程序是动态链接生成,所以在程序运行时会调用libc.so(程序运行时会将所需要动态链接库加载到进程空间),然后通过system execve等系统函数在内存地址来覆盖掉返回地址.../sh”字符串 程序自身就有system函数,但是没有”/bin/sh”字符串 程序自身就没有system函数和”/bin/sh”字符串,但给出了libc.so文件 程序自身就没有system函数和...bin/sh地址 ​ 当程序没有字符串/bin/sh时我们可以利用程序某些函数:read,fgets,gets等函数将/bin/sh字符串写入bss段 ​ 对于只给出了...,通过ldd查询来找出其使用libc.so版本是哪一个,然后再去找system()函数和/bin/sh字符串 解题步骤 确定程序使用libc库,通过命令ldd查看 利用cyclic算出多少字节溢出

75430

PWN从入门到放弃(7)——栈溢出之ret2libc

不过有的题目也不会给出libc库,需要我们根据函数libc偏移量来查找对应libc库。...计算libc基址 libc基地址 = 函数实际地址 – 函数libc偏移地址 system_addr = libc基地址 + system在libc偏移地址 利用ret2libc需解决问题...程序中有可输出地址内容函数:puts(); 计算libc基址; 找到 system() 函数地址; 找到 “/bin/sh” 这个字符串地址。...2) 查看程序流程 运行一下程序,看看程序大概流程 程序获取一次用户输入 3) 分析程序&查找漏洞点 将程序扔到ida pro里分析 首先分析main()函数 int __cdecl main(int...在本地调试成功后,将libc库换成题目给,然后执行脚本即可。 这里可使用ldd命令来查看当前程序所使用libc库地址。

41210

BUUCTF-刷题记录

sub_40060d函数可以直接查看flag,控制eip指向这个函数即可 EXP from pwn import * sh = process("....那么整体思路便是先用\x00来截断strncmp比较,然后跟上较大\xff,当程序到sub_80487d0函数时,就可以构造ROP链进行溢出了 EXP from pwn import *...ciscn_2019_s_3 利用SROP技术 因为程序自带write函数,可以输出栈地址,那么就只用接收一下这个地址,然后以该地址-read参数在栈偏移量就可以得出binsh地址了...但是给出了libc版本,并且程序中有printf函数,拿来泄露基地址,最后利用libcsystem即可返回shell。...可以看到只开启了nx保护 这里有两个常见方法来获取flag 方法1: 使用程序已有的get_flag函数来读取flag 使用ida查看伪代码可以看到这个get_flag函数要求传入两个参数必须为814536271

2.1K10

ROP-Ret2libc详解

利用原理 ret2libc 这种攻击方式主要是针对 动态链接(Dynamic linking) 编译程序,因为正常情况下是无法在程序中找到像 system() 、execve() 这种系统级函数....当程序开始运行时会加载系统库函数,通过函数返回地址直接指向系统库(libc.so.6)函数system函数,从而执行例如system函数获得shell。...第一次劫持 是为了泄露出某个函数地址(需要构造两条件) 控制程序eip指向,为第二次劫持做准备 寻找output函数puts和write)和待泄露函数 只能泄露使用了函数:因为动态链接库加载机制是...lazy原则(got表) libc.so 动态链接库函数之间相对偏移固定。...,先确定泄露出函数真实地址,在利用后三位在libc_database确定所使用库并下载到本地 第一次溢出 泄露函数真实地址得到基地址 要使用output函数puts和write函数

1.8K40

通过修改第三方soelf符号表兼容redhat6.2下低版本glibc

背景:第三方so依赖glibc2.14版本,如何在不升级redhat 6.2自带gblic2.12情况下,运行so?...结论:通过16进制编辑器修改soelf符号表来解决这个问题,即强制让so里依赖高版本gblic函数指向低版本glibc。...so指向2.2.5版本 修改elf readelf -sV libTaSESDK.so >1.txt 通过readelf 命令查看soELF 符号表 定位到 .gnu.version_r ,其表示二进制程序实际依赖库文件版本...如果行数比较多,可以通过Version版本与 .gnu.version信息对应,再与.dynsym对应来找到对应函数。...hash 值,vna_other 为对应 .gnu.version 表符号版本值,vna_name 指向库名称字符串偏移量(也可以在 ELF 头中找到),vna_next 为下一个条目的位置(

1.3K20

PWN从入门到放弃(10)——栈溢出之ret2libc(x64)

前面我们介绍了32位elf程序ret2libc利用方法 本篇我们介绍一下64位ret2libc 0x00 例题 题目附件下载 1)查看文件信息 $ file ret2libc $ checksec...ret2libc 2)查看程序流程 运行一下程序,看看程序大概流程 程序提供一次输入一次输出 3)分析程序&查找漏洞点 将程序扔到ida pro里分析 首先分析main()函数 我们看到,程序使用了gets...libc基地址,再计算system函数和binsh地址 4)构造payload 首先构造第一段payload 这里需要注意,64位程序和32位程序有比较大区别,32位程序函数参数是通过栈来传参,我们只需要构造一个栈结构即可...8,因为64位程序地址长度为8 当我们成功获取到puts函数实际地址后,即可将本地调试改成远程调试,将远程服务器上程序puts函数实际地址泄露出来,然后根据puts函数实际地址来查找远程服务器上所使用...amd64库,32位程序选择i386库 我们将对应库下载下来,放到程序文件夹下,重命名位libc.so,并将其导入脚本 libc = ELF('.

67510

栈溢出利用之Return to dl-resolve

0x00 前言 在CTF中一般栈溢出题目会给出程序对应libc,这样我们在泄漏一个libc地址之后就能根据偏移量去计算libc其他地址,比如system、/bin/sh或是libc基址。...这个时候如果我们要计算system函数地址的话,可以利用泄露出libc地址去http://libcdb.com搜索对应libc版本,因为一个libc函数地址低三位在对应libc版本总是不变...rel_off即为需要重定位函数在rel_plt节偏移,该节查看如下 ? 上面是重定位变量,下面是重定位函数,我们主要看下面的部分。...比如第一个函数setbuf,在表占第一位,那么它rel_off就为0,第二个函数read偏移就为8.第n个函数偏移为n*len_of_elfRel,在32位程序len_of_elfRel大小为...index } Elf32_Sym; 查看内存的话一般看到是下面这个样子: ?

56800

linux常用命令--开发调试篇

/cmdTest a=10,b=0 Floating point exception (core dumped) 程序内容是在main函数调用test,计算a/b值,其中b值为0,因此程序由于除...elf,是64位、运行于x86-64程序,not striped表明elf文件还保留着符号信息以及调试信息等不影响程序运行内容。...查看函数或者全局变量是否存在于elf文件--nm nm命令用于查看elf文件符号信息。文件编译出来之后,我们可能不知道新增加函数或者全局变量是否已经成功编译进去。...打印elf文件可打印字符串--strings 例如你在代码存储了一个版本号信息,那么即使编译成elf文件后,仍然可以通过strings搜索其中字符串甚至可以搜索某个.c文件是否编译在其中: strings...bss段:存放程序未初始化全局变量字节数大小 当我们知道各个段大小之后,如果有减小程序大小需求,就可以有针对性elf文件进行优化处理。

1.5K30

PWN从入门到放弃(11)——栈溢出之rop

通过上一篇文章栈溢出漏洞原理详解与利用,我们可以发现栈溢出控制点是ret处,那么ROP核心思想就是利用以ret结尾指令序列把栈应该返回EIP地址更改成我们需要值,从而控制程序执行流程。...注:通俗来说,rop就是利用程序已有的程序段来拼接一个我们需要功能(函数)。...0x02 例题 例题下载(例题为铁人三项第五赛区_2018_rop) 1)查看程序信息 $ checksec 2018_rop 32位程序,开启了NX保护(意味着栈不可执行) 2)IDA pro 分析...打开看到vulnerable_function()直接跟进 read()函数处存在溢出,溢出偏移为0x8C 根据我们之前讲题目,这种只存在溢出题目需要泄漏一个函数实际地址,再计算libc基地址。...,之前我们都是用puts函数打印puts函数实际地址,我们也可以用write函数打印write函数实际地址(当然也可以打印其他函数实际地址),这里我用wirte函数打印__libc_start_main

43710

二进制学习系列-栈溢出之2018红帽杯

", byte_804A180, byte_804A080); 仔细查看发现nbytes为姓名和职业所输入字符串和,所以我们可以推断,read函数地址s到返回值地址并没有这么大,即使只要姓名和职业字符串足够长...返回值地址,所以偏移量为0xffffcfdc-0xffffcec7 = 277 偏移量有了我们可以开始思考该如何去构造playload,查看文件函数 ?...我们利用返回值跳板跳转到puts函数打印出__libc_start_main函数地址,从而找到libc版本找出system函数以及/bin/sh函数地址。...思路: 利用偏移返回到puts函数地址 打印出__libc_start_main函数地址 找出对应libc版本 计算出相应system函数以及/bin/sh字符串地址 重新返回到main函数 再次利用偏移返回到.../pwn2') libc = ELF('./libc.6.so') elf = ELF('.

58821

Nemu-Wp

10条指令可以用: help:查看所有指令,以及其作用 c:继续执行程序(有点像gdbc命令) q:退出程序 si:单步执行程序 info:显示所有的断点信息(后面可以用来泄露libc) x:读取内存内容...那么利用思想就是先设置一个断点,让head不为NULL,然后利用任意地址写功能,向head写入got表地址,然后利用info函数打印断点信息,来泄露libc地址,从而计算出libc基址,由于...然后又由于写入与读取都是通过结构体偏移来实现,可以在ida查看到,old_value位置位于head偏移0x30位置,所以读写时候需要减去0x30。.../nemu') elf=ELF('./nemu') libc=ELF('....+ hex(libc_base)) sys_addr = libc_base+libc.symbols['system'] mem_set(head_addr,0) strcmp_got=elf.got

41720

PWNCTF部分复现

由于程序保护全开,不过PIE对本题没什么影响,这里我选择泄露栈上__libc_start_main函数地址,推算出libc基址后用one_gadget找到一发getshell偏移覆盖saved rip...ROP方法需要pop rdi ret,如果用elfgadget,需要计算出程序加载基址,必须再次泄露绕过PIE,这里我直接用了libcpop rdi ret,不需要再泄露一次了 不过这里我打远程时候有一些玄学问题...本题需要注意到函数指针v5在栈上,原本v5被赋值成dologic,而调试发现dologic和giveshell函数只有最低一字节不同,正好绕过PIE 用pedainfo functions查看 ?...这里如果要给开了PIE程序下断点,我一般是先vmmap看ELF基址,然后手动加上函数偏移 判断绕过也比较简单,第二个为0即可 通常,一个内存页大小为0x1000,这表明地址后12位,3个十六进制数地址是始终不变...泄露出函数在GOT表位置后计算出libc基址,调整one_gadget地址 这里交互时也可以发现都必须是有符号数,写入负数输出时仍然是负数 ?

87720

含大量图文解析及例程 | Linux下ELF文件、链接、加载与库(

下图是Linux内核代码ELF文件装载相关一些代码: /fs/binfmt_elf.c Load_elf_binary代码走读: 检查ELF文件头部信息(一致性检查) 加载程序头表(可以看到一个可执行程序必须至少有一个段...libc.so中有300K 条指令,2 MiB 大小,每个程序如果都静态链接,浪费空间很大,最好是整个系统里只有一个 libc 副本,而每个用到 libc 程序在运行时都可以用到 libc 代码...我们通过创建一个动态链接库 libhuge.so, 然后创建1000个进程去调用这个库foo函数,该函数是128M 个 nop。...也就是说,库foo函数确实是动态链接,内存只有一份foo副本。 这在操作系统内核不难实现:所有以只读方式映射同一个文件部分(代码部分)时,都指向同一个副本,这个过程中会创建引用计数。...可以通过readelf -d [fileName]来查看。 它对应elf.hElf64_Dyn这个结构体。

2.6K21

吴章金: 如何创建一个*可执行*共享库

: 如何让共享库文件也可以直接执行 如何在可执行文件中用 dlopen 解析自身函数 这两个需求汇总起来,可以大体理解为如何让一个程序既可以作为共享库,又能够直接运行。...先来看看两类文件区别 当前 Linux 下面的二进制程序标准格式是 ELF,这类格式可以用来表示 4 种不同类型文件: 可重定位目标文件(.o),用于静态链接 可执行文件格式,用于运行时创建进程映像...共享目标文件(.so,共享库),协同可执行文件创建进程映像 Core dump(core),运行过程崩溃时自动生成,用于调试 我们来看中间两类: 可执行文件 如果不引用外部库函数,那么所有符号地址是确定...(-m32 用来生成采用 i386 指令代码): $ gcc -m32 -o hello hello.c $ file hello hello: ELF 32-bit LSB executable,...我们在程序主动加入一个 .interp 节区来指定动态链接器吧。

1.1K20
领券