返回顶部
首页 > 资讯 > 操作系统 >Linux下怎么使用radare2
  • 401
分享到

Linux下怎么使用radare2

2023-06-27 22:06:57 401人浏览 安东尼
摘要

本篇内容主要讲解“linux下怎么使用radare2”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下怎么使用radare2”吧!为什么选择 Radare2?有大量(非原生的)Linux

本篇内容主要讲解“linux下怎么使用radare2”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下怎么使用radare2”吧!

Linux下怎么使用radare2

为什么选择 Radare2?

有大量(非原生的)Linux 工具可用于二进制分析,为什么要选择 Radare2 呢?我的理由很简单。

首先,它是一个开源项目,有一个活跃而健康的社区。如果你正在寻找新颖的功能或提供着 bug 修复的工具,这很重要。

其次,Radare2 可以在命令行上使用,而且它有一个功能丰富的图形用户界面(GUI)环境,叫做 Cutter,适合那些对 GUI 比较熟悉的人。作为一个长期使用 Linux 的用户,我对习惯于在 shell 上输入。虽然熟悉 Radare2 的命令稍微有一点学习曲线,但我会把它比作 学习 Vim。你可以先学习基本的东西,一旦你掌握了它们,你就可以继续学习更高级的东西。很快,它就变成了肌肉记忆。

第三,Radare2 通过插件可以很好的支持外部工具。例如,最近开源的 Ghidra 二进制分析和逆向工具reversing tool很受欢迎,因为它的反编译器功能是逆向软件的关键要素。你可以直接从 Radare2 控制台安装 Ghidra 反编译器并使用,这很神奇,让你两全其美。

开始使用 Radare2

要安装 Radare2,只需克隆其存储库并运行 user.sh 脚本。如果你的系统上还没有一些预备软件包,你可能需要安装它们。一旦安装完成,运行 r2 -v 命令来查看 Radare2 是否被正确安装:

git clone https://GitHub.com/radareorg/radare2.git$ cd radare2$ ./sys/user.sh# version$ r2 -vradare2 4.6.0-git 25266 @ linux-x86-64 git.4.4.0-930-g48047b317commit: 48047b3171e6ed0480a71a04c3693a0650d03543 build: 2020-11-17__09:31:03$

获取二进制测试样本

现在 r2 已经安装好了,你需要一个样本二进制程序来试用它。你可以使用任何系统二进制文件(ls、bash 等),但为了使本教程的内容简单,请编译以下 C 程序:

$ cat adder.C#include int adder(int num) {return num + 1;}int main() {int res, num1 = 100;res = adder(num1);printf("Number now is : %d\n", res);return 0;}$ GCc adder.c -o adder$ file adderadder: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=9d4366f7160e1ffb46b14466e8e0d70f10de2240, not stripped$ ./adderNumber now is : 101

加载二进制文件

要分析二进制文件,你必须在 Radare2 中加载它。通过提供文件名作为 r2 命令的一个命令行参数来加载它。你会进入一个独立的 Radare2 控制台,这与你的 shell 不同。要退出控制台,你可以输入 QuitExit 或按 Ctrl+D

$ r2 ./adder-- Learn pancake as if you were radare![0x004004b0]> quit$

分析二进制

在你探索二进制之前,你必须让 r2 为你分析它。你可以通过在 r2 控制台中运行 aaa 命令来实现:

$ r2 ./adder-- Learn pancake as if you were radare![0x004004b0]> quit$

这意味着每次你选择一个二进制文件进行分析时,你必须在加载二进制文件后输入一个额外的命令 aaa。你可以绕过这一点,在命令后面跟上 -A 来调用 r2;这将告诉 r2 为你自动分析二进制:

$ r2 -A ./adder[x] Analyze all flags starting with sym. and entry0 (aa)[x] Analyze function calls (aac)[x] Analyze len bytes of instructions for references (aar)[x] Check for vtables[x] Type matching analysis for all functions (aaft)[x] Propagate noreturn infORMation[x] Use -AA or aaaa to perform additional experimental analysis.-- Already up-to-date.[0x004004b0]>

获取一些关于二进制的基本信息

在开始分析一个二进制文件之前,你需要一些背景信息。在许多情况下,这可以是二进制文件的格式(ELF、PE 等)、二进制的架构(x86、AMD、ARM 等),以及二进制是 32 位还是 64 位。方便的 r2 的 iI 命令可以提供所需的信息:

[0x004004b0]> iIarch x86baddr 0x400000binsz 14724bintype elfbits 64canary falseclass ELF64compiler GCC: (GNU) 8.3.1 20190507 (Red Hat 8.3.1-4)crypto falseendian littlehavecode trueintrp /lib64/ld-linux-x86-64.so.2laddr 0x0lang clinenum truelsyms trueMachine AMD x86-64 architecturemaxopsz 16minopsz 1nx trueos linuxpcalign 0pic falserelocs truerelro partialrpath NONEsanitiz falsestatic falsestripped falsesubsys linuxva true[0x004004b0]>[0x004004b0]>

导入和导出

通常情况下,当你知道你要处理的是什么样的文件后,你就想知道二进制程序使用了什么样的标准库函数,或者了解程序的潜在功能。在本教程中的示例 C 程序中,唯一的库函数是 printf,用来打印信息。你可以通过运行 ii 命令看到这一点,它显示了该二进制所有导入的库:

[0x004004b0]> ii[Imports]nth vaddr bind type lib name―――――――――――――――――――――――――――――――――――――1 0x00000000 WEAK NOTYPE _ITM_dereGISterTMCloneTable2 0x004004a0 GLOBAL FUNC printf3 0x00000000 GLOBAL FUNC __libc_start_main4 0x00000000 WEAK NOTYPE __gmon_start__5 0x00000000 WEAK NOTYPE _ITM_registerTMCloneTable

该二进制也可以有自己的符号、函数或数据。这些函数通常显示在 Exports 下。这个测试的二进制导出了两个函数:main 和 adder。其余的函数是在编译阶段,当二进制文件被构建时添加的。加载器需要这些函数来加载二进制文件(现在不用太关心它们):

[0x004004b0]>[0x004004b0]> iE[Exports]nth paddr vaddr bind type size lib name――――――――――――――――――――――――――――――――――――――――――――――――――――――82 0x00000650 0x00400650 GLOBAL FUNC 5 __libc_csu_fini85 ---------- 0x00601024 GLOBAL NOTYPE 0 _edata86 0x00000658 0x00400658 GLOBAL FUNC 0 _fini89 0x00001020 0x00601020 GLOBAL NOTYPE 0 __data_start90 0x00000596 0x00400596 GLOBAL FUNC 15 adder92 0x00000670 0x00400670 GLOBAL OBJ 0 __dso_handle93 0x00000668 0x00400668 GLOBAL OBJ 4 _IO_stdin_used94 0x000005e0 0x004005e0 GLOBAL FUNC 101 __libc_csu_init95 ---------- 0x00601028 GLOBAL NOTYPE 0 _end96 0x000004e0 0x004004e0 GLOBAL FUNC 5 _dl_relocate_static_pie97 0x000004b0 0x004004b0 GLOBAL FUNC 47 _start98 ---------- 0x00601024 GLOBAL NOTYPE 0 __bss_start99 0x000005a5 0x004005a5 GLOBAL FUNC 55 main100 ---------- 0x00601028 GLOBAL OBJ 0 __TMC_END__102 0x00000468 0x00400468 GLOBAL FUNC 0 _init[0x004004b0]>

哈希信息

如何知道两个二进制文件是否相似?你不能只是打开一个二进制文件并查看里面的源代码。在大多数情况下,二进制文件的哈希值(md5sum、sha1、sha256)是用来唯一识别它的。你可以使用 it 命令找到二进制的哈希值:

[0x004004b0]> itmd5 7e6732f2b11dec4a0c7612852cede670sha1 d5fa848c4b53021f6570dd9b18d115595a2290aesha256 13Dd5a492219dac1443a816ef5f91db8d149e8edbf26f24539c220861769e1c2[0x004004b0]>

函数

代码按函数分组;要列出二进制中存在的函数,请运行afl 命令。下面的列表显示了main函数和adder函数。通常,以sym.imp开头的函数是从标准库(这里是 glibc)中导入的:

[0x004004b0]> afl0x004004b0    1 46           entry00x004004f0    4 41   -> 34   sym.deregister_tm_clones0x00400520    4 57   -> 51   sym.register_tm_clones0x00400560    3 33   -> 32   sym.__do_global_dtors_aux0x00400590    1 6            entry.init00x00400650    1 5            sym.__libc_csu_fini0x00400658    1 13           sym._fini0x00400596    1 15           sym.adder0x004005e0    4 101          loc..annobin_elf_init.c0x004004e0    1 5            loc..annobin_static_reloc.c0x004005a5    1 55           main0x004004a0    1 6            sym.imp.printf0x00400468    3 27           sym._init[0x004004b0]>

交叉引用

[0x004004b0]> axt sym.addermain 0x4005b9 [CALL] call sym.adder[0x004004b0]>[0x004004b0]> axt mainentry0 0x4004d1 [DATA] mov rdi, main[0x004004b0]>

寻找定位

在处理文本文件时,你经常通过引用行号和行或列号在文件内移动;在二进制文件中,你需要使用地址。这些是以 0x 开头的十六进制数字,后面跟着一个地址。要找到你在二进制中的位置,运行 s 命令。要移动到不同的位置,使用 s 命令,后面跟上地址。

函数名就像标签一样,内部用地址表示。如果函数名在二进制中(未剥离的),可以使用函数名后面的 s 命令跳转到一个特定的函数地址。同样,如果你想跳转到二进制的开始,输入 s 0:

[0x004004b0]> s0x4004b0[0x004004b0]>[0x004004b0]> s main[0x004005a5]>[0x004005a5]> s0x4005a5[0x004005a5]>[0x004005a5]> s sym.adder[0x00400596]>[0x00400596]> s0x400596[0x00400596]>[0x00400596]> s 0[0x00000000]>[0x00000000]> s0x0[0x00000000]>

十六进制视图

通常情况下,原始二进制没有意义。在十六进制模式下查看二进制及其等效的 ASCII 表示法会有帮助:

[0x004004b0]> s main[0x004005a5]>[0x004005a5]> px- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF0x004005a5  5548 89e5 4883 ec10 c745 fc64 0000 008b  UH..H....E.d....0x004005b5  45fc 89c7 e8d8 ffff ff89 45f8 8b45 f889  E.........E..E..0x004005c5  c6bf 7806 4000 b800 0000 00e8 cbfe ffff  ..x.@...........0x004005d5  b800 0000 00c9 c30f 1f40 00f3 0f1e fa41  .........@.....A0x004005e5  5749 89d7 4156 4989 f641 5541 89fd 4154  WI..AVI..AUA..AT0x004005f5  4c8d 2504 0820 0055 488d 2d04 0820 0053  L.%.. .UH.-.. .S0x00400605  4c29 e548 83ec 08e8 57fe ffff 48c1 fd03  L).H....W...H...0x00400615  741f 31db 0f1f 8000 0000 004c 89fa 4c89  t.1........L..L.0x00400625  f644 89ef 41ff 14dc 4883 c301 4839 dd75  .D..A...H...H9.u0x00400635  ea48 83c4 085b 5d41 5c41 5d41 5e41 5fc3  .H...[]A\A]A^A_.0x00400645  9066 2e0f 1f84 0000 0000 00f3 0f1e fac3  .f..............0x00400655  0000 00f3 0f1e fa48 83ec 0848 83c4 08c3  .......H...H....0x00400665  0000 0001 0002 0000 0000 0000 0000 0000  ................0x00400675  0000 004e 756d 6265 7220 6e6f 7720 6973  ...Number now is0x00400685  2020 3a20 2564 0a00 0000 0001 1b03 3b44    : %d........;D0x00400695  0000 0007 0000 0000 feff ff88 0000 0020  ...............[0x004005a5]>

反汇编

如果你使用的是编译后的二进制文件,则无法查看源代码。编译器将源代码转译成 CPU 可以理解和执行的机器语言指令;其结果就是二进制或可执行文件。然而,你可以查看汇编指令(的助记词)来理解程序正在做什么。例如,如果你想查看 main 函数在做什么,你可以使用 s main 寻找 main 函数的地址,然后运行 pdf 命令来查看反汇编的指令。

要理解汇编指令,你需要参考体系结构手册(这里是 x86),它的应用二进制接口(ABI,或调用惯例),并对堆栈的工作原理有基本的了解:

[0x004004b0]> s main[0x004005a5]>[0x004005a5]> s0x4005a5[0x004005a5]>[0x004005a5]> pdf           ; DATA XREF from entry0 @ 0x4004d1┌ 55: int main (int argc, char **argv, char **envp);│           ; var int64_t var_8h @ rbp-0x8│           ; var int64_t var_4h @ rbp-0x4│           0x004005a5      55             push rbp│           0x004005a6      4889e5         mov rbp, rsp│           0x004005a9      4883ec10       sub rsp, 0x10│           0x004005ad      c745fc640000.  mov dWord [var_4h], 0x64    ; 'd' ; 100│           0x004005b4      8b45fc         mov eax, dword [var_4h]│           0x004005b7      89c7           mov edi, eax│           0x004005b9      e8d8ffffff     call sym.adder│           0x004005be      8945f8         mov dword [var_8h], eax│           0x004005c1      8b45f8         mov eax, dword [var_8h]│           0x004005c4      89c6           mov esi, eax│           0x004005c6      bf78064000     mov edi, str.Number_now_is__:__d ; 0x400678 ; "Number now is  : %d\n" ; const char *format│           0x004005cb      b800000000     mov eax, 0│           0x004005d0      e8cbfeffff     call sym.imp.printf         ; int printf(const char *format)│           0x004005d5      b800000000     mov eax, 0│           0x004005da      c9             leave└           0x004005db      c3             ret[0x004005a5]>这是 adder 函数的反汇编结果:[0x004005a5]> s sym.adder[0x00400596]>[0x00400596]> s0x400596[0x00400596]>[0x00400596]> pdf           ; CALL XREF from main @ 0x4005b9┌ 15: sym.adder (int64_t arg1);│           ; var int64_t var_4h @ rbp-0x4│           ; arg int64_t arg1 @ rdi│           0x00400596      55             push rbp│           0x00400597      4889e5         mov rbp, rsp│           0x0040059a      897dfc         mov dword [var_4h], edi     ; arg1│           0x0040059d      8b45fc         mov eax, dword [var_4h]│           0x004005a0      83c001         add eax, 1│           0x004005a3      5d             pop rbp└           0x004005a4      c3             ret[0x00400596]>

字符串

查看二进制中存在哪些字符串可以作为二进制分析的起点。字符串是硬编码到二进制中的,通常会提供重要的提示,可以让你将重点转移到分析某些区域。在二进制中运行 iz 命令来列出所有的字符串。这个测试二进制中只有一个硬编码的字符串:

[0x004004b0]> iz[Strings]nth paddr      vaddr      len size section type  string―――――――――――――――――――――――――――――――――――――――――――――――――――――――0   0x00000678 0x00400678 20  21   .rodata ascii Number now is  : %d\n[0x004004b0]>

交叉引用字符串

和函数一样,你可以交叉引用字符串,看看它们是从哪里被打印出来的,并理解它们周围的代码:

[0x004004b0]> ps @ 0x400678Number now is  : %d[0x004004b0]>[0x004004b0]> axt 0x400678main 0x4005c6 [DATA] mov edi, str.Number_now_is__:__d[0x004004b0]>

可视模式

当你的代码很复杂,有多个函数被调用时,很容易迷失方向。如果能以图形或可视化的方式查看哪些函数被调用,根据某些条件采取了哪些路径等,会很有帮助。在移动到感兴趣的函数后,可以通过 VV 命令来探索 r2 的可视化模式。例如,对于 adder 函数:

[0x004004b0]> s sym.adder[0x00400596]>[0x00400596]> VV
Linux下怎么使用radare2
全功能的二进制文件分析工具 Radare2全功能的二进制文件分析工具 Radare2

调试器

到目前为止,你一直在做的是静态分析 —— 你只是在看二进制文件中的东西,而没有运行它,有时你需要执行二进制文件,并在运行时分析内存中的各种信息。r2 的内部调试器允许你运行二进制文件、设置断点、分析变量的值、或者转储寄存器的内容。

用 -d 标志启动调试器,并在加载二进制时添加 -A 标志进行分析。你可以通过使用 db 命令在不同的地方设置断点,比如函数或内存地址。要查看现有的断点,使用 dbi 命令。一旦你放置了断点,使用 dc 命令开始运行二进制文件。你可以使用 dbt 命令查看堆栈,它可以显示函数调用。最后,你可以使用 drr 命令转储寄存器的内容:

$ r2 -d -A ./adderProcess with PID 17453 started...= attach 17453 17453bin.baddr 0x00400000Using 0x400000asm.bits 64[x] Analyze all flags starting with sym. and entry0 (aa)[x] Analyze function calls (aac)[x] Analyze len bytes of instructions for references (aar)[x] Check for vtables[x] Type matching analysis for all functions (aaft)[x] Propagate noreturn information[x] Use -AA or aaaa to perform additional experimental analysis.-- git checkout hamster[0x7f77b0a28030]>[0x7f77b0a28030]> db main[0x7f77b0a28030]>[0x7f77b0a28030]> db sym.adder[0x7f77b0a28030]>[0x7f77b0a28030]> dbi0 0x004005a5 E:1 T:01 0x00400596 E:1 T:0[0x7f77b0a28030]>[0x7f77b0a28030]> afl | grep main0x004005a5    1 55           main[0x7f77b0a28030]>[0x7f77b0a28030]> afl | grep sym.adder0x00400596    1 15           sym.adder[0x7f77b0a28030]>[0x7f77b0a28030]> dchit breakpoint at: 0x4005a5[0x004005a5]>[0x004005a5]> dbt0  0x4005a5           sp: 0x0                 0    [main]  main sym.adder+151  0x7f77b0687873     sp: 0x7ffe35ff6858      0    [??]  section..gnu.build.attributes-13458205972  0x7f77b0a36e0a     sp: 0x7ffe35ff68e8      144  [??]  map.usr_lib64_ld_2.28.so.r_x+65034[0x004005a5]> dchit breakpoint at: 0x400596[0x00400596]> dbt0  0x400596           sp: 0x0                 0    [sym.adder]  rip entry.init0+61  0x4005be           sp: 0x7ffe35ff6838      0    [main]  main+252  0x7f77b0687873     sp: 0x7ffe35ff6858      32   [??]  section..gnu.build.attributes-13458205973  0x7f77b0a36e0a     sp: 0x7ffe35ff68e8      144  [??]  map.usr_lib64_ld_2.28.so.r_x+65034[0x00400596]>[0x00400596]>[0x00400596]> drrax = 0x00000064rbx = 0x00000000rcx = 0x7f77b0a21738rdx = 0x7ffe35ff6948r8 = 0x7f77b0a22da0r9 = 0x7f77b0a22da0r10 = 0x0000000fr11 = 0x00000002r12 = 0x004004b0r13 = 0x7ffe35ff6930r14 = 0x00000000r15 = 0x00000000rsi = 0x7ffe35ff6938rdi = 0x00000064rsp = 0x7ffe35ff6838rbp = 0x7ffe35ff6850rip = 0x00400596rflags = 0x00000202orax = 0xffffffffffffffff[0x00400596]>

反编译器

能够理解汇编是二进制分析的前提。汇编语言总是与二进制建立和预期运行的架构相关。一行源代码和汇编代码之间从来没有 1:1 的映射。通常,一行 C 源代码会产生多行汇编代码。所以,逐行读取汇编代码并不是最佳的选择。

这就是反编译器的作用。它们试图根据汇编指令重建可能的源代码。这与用于创建二进制的源代码绝不完全相同,它是基于汇编的源代码的近似表示。另外,要考虑到编译器进行的优化,它会生成不同的汇编代码以加快速度,减小二进制的大小等,会使反编译器的工作更加困难。另外,恶意软件作者经常故意混淆代码,让恶意软件的分析人员望而却步。

Radare2 通过插件提供反编译器。你可以安装任何 Radare2 支持的反编译器。使用 r2pm -l 命令可以查看当前插件。使用 r2pm install 命令来安装一个示例的反编译器 r2dec:

$ r2pm  -l$$ r2pm install r2decCloning into 'r2dec'...remote: Enumerating objects: 100, done.remote: Counting objects: 100% (100/100), done.remote: Compressing objects: 100% (97/97), done.remote: Total 100 (delta 18), reused 27 (delta 1), pack-reused 0Receiving objects: 100% (100/100), 1.01 MiB | 1.31 MiB/s, done.Resolving deltas: 100% (18/18), done.Install Done For r2decgmake: Entering directory '/root/.local/share/radare2/r2pm/git/r2dec/p'[CC] duktape/duktape.o[CC] duktape/duk_console.o[CC] core_pdd.o[CC] core_pdd.sogmake: Leaving directory '/root/.local/share/radare2/r2pm/git/r2dec/p'$$ r2pm  -lr2dec$

反编译器视图

要反编译一个二进制文件,在 r2 中加载二进制文件并自动分析它。在本例中,使用 s sym.adder 命令移动到感兴趣的 adder 函数,然后使用 pdda 命令并排查看汇编和反编译后的源代码。阅读这个反编译后的源代码往往比逐行阅读汇编更容易:

$ r2 -A ./adder[x] Analyze all flags starting with sym. and entry0 (aa)[x] Analyze function calls (aac)[x] Analyze len bytes of instructions for references (aar)[x] Check for vtables[x] Type matching analysis for all functions (aaft)[x] Propagate noreturn information[x] Use -AA or aaaa to perform additional experimental analysis.-- What do you want to debug today?[0x004004b0]>[0x004004b0]> s sym.adder[0x00400596]>[0x00400596]> s0x400596[0x00400596]>[0x00400596]> pdda   ; assembly                               |                                             |                                             | #include                                             |     ; (fcn) sym.adder ()                     | int32_t adder (int64_t arg1) {                                            |     int64_t var_4h;                                            |     rdi = arg1;   0x00400596 push rbp                      |       0x00400597 mov rbp, rsp                  |       0x0040059a mov dword [rbp - 4], edi      |     *((rbp - 4)) = edi;   0x0040059d mov eax, dword [rbp - 4]      |     eax = *((rbp - 4));   0x004005a0 add eax, 1                    |     eax++;   0x004005a3 pop rbp                       |       0x004005a4 ret                           |     return eax;                                            | }[0x00400596]>

配置设置

随着你对 Radare2 的使用越来越熟悉,你会想改变它的配置,以适应你的工作方式。你可以使用 e 命令查看 r2 的默认配置。要设置一个特定的配置,在 e 命令后面添加 config = value:

[0x004005a5]> e | wc -l593[0x004005a5]> e | grep syntaxasm.syntax = intel[0x004005a5]>[0x004005a5]> e asm.syntax = att[0x004005a5]>[0x004005a5]> e | grep syntaxasm.syntax = att[0x004005a5]>

要使配置更改永久化,请将它们放在 r2 启动时读取的名为 .radare2rc 的启动文件中。这个文件通常在你的主目录下,如果没有,你可以创建一个。一些示例配置选项包括:

$ cat ~/.radare2rce asm.syntax = atte scr.utf8 = trueeco solarizede cmd.stack = truee stack.size = 256$

探索更多

你已经看到了足够多的 Radare2 功能,对这个工具有了一定的了解。因为 Radare2 遵循 Unix 哲学,即使你可以从它的主控台做各种事情,它也会在下面使用一套独立的二进制来完成它的任务。

探索下面列出的独立二进制文件,看看它们是如何工作的。例如,用 iI 命令在控制台看到的二进制信息也可以用 rabin2 命令找到:

$ cd bin/$$ lsprefix  r2agent    r2pm  rabin2   radiff2  ragg2    rarun2   rasm2r2      r2-indent  r2r   radare2  rafind2  rahash3  rasign2  rax2$

到此,相信大家对“Linux下怎么使用radare2”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Linux下怎么使用radare2

本文链接: https://lsjlt.com/news/314249.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Linux下怎么使用radare2
    本篇内容主要讲解“Linux下怎么使用radare2”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下怎么使用radare2”吧!为什么选择 Radare2?有大量(非原生的)Linux...
    99+
    2023-06-27
  • Linux下怎么使用OpenSSL
    本篇内容介绍了“Linux下怎么使用OpenSSL”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!OpenSSL是一个强大的安全套接字层密码库...
    99+
    2023-06-27
  • Linux下怎么使用Bpftrace
    今天小编给大家分享一下Linux下怎么使用Bpftrace的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Bpftrace是L...
    99+
    2023-06-28
  • linux下xinput怎么使用
    本篇内容主要讲解“linux下xinput怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux下xinput怎么使用”吧! ...
    99+
    2023-03-14
    linux
  • Linux下libnet怎么使用
    在Linux下,`libnet`是一个用于网络数据包构造和发送的C库。以下是一个简单的步骤来使用`libnet`:1. 安装`lib...
    99+
    2023-08-24
    Linux libnet
  • linux下php-fpm怎么使用
    本篇内容主要讲解“linux下php-fpm怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux下php-fpm怎么使用”吧!所以启动、关闭和重新加...
    99+
    2024-04-02
  • 怎么在Linux下使用rsync
    这篇文章主要介绍“怎么在Linux下使用rsync”,在日常操作中,相信很多人在怎么在Linux下使用rsync问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么在Linux下使用rsync”的疑惑有所帮助!...
    99+
    2023-06-16
  • Linux下的Taskwarrior怎么使用
    本篇内容主要讲解“Linux下的Taskwarrior怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下的Taskwarrior怎么使用”吧!Taskwarrior 是 Ubun...
    99+
    2023-06-28
  • 在linux下core怎么使用
    这篇“在linux下core怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“在lin...
    99+
    2023-03-24
    linux core
  • linux下cp命令怎么使用
    这篇文章主要讲解了“linux下cp命令怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux下cp命令怎么使用”吧!在linux中,cp是“copy file”的缩写,cp命令用...
    99+
    2023-06-22
  • linux下traceroute命令怎么使用
    在Linux下,`traceroute`命令用于跟踪网络数据包从本地主机到目的主机的路径。下面是`traceroute`命令的使用方...
    99+
    2023-09-20
    linux
  • Linux下journalctl命令怎么使用
    本篇内容主要讲解“Linux下journalctl命令怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下journalctl命令怎么使用”吧!在Systemd出现之前,Linux...
    99+
    2023-06-27
  • Linux下怎么使用pcap文件
    今天小编给大家分享一下Linux下怎么使用pcap文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。pcap文件是常用的数据...
    99+
    2023-06-28
  • Linux下怎么使用crontab命令
    本篇内容主要讲解“Linux下怎么使用crontab命令”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下怎么使用crontab命令”吧!Linux crontab是用来定期执行程序的命...
    99+
    2023-06-28
  • Linux下怎么使用vim画图
    这篇文章将为大家详细讲解有关Linux下怎么使用vim画图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Vim是Linux上常用编辑器,但是也可以用来画图,在Linux系统中并不缺少画图软件但是使用VIM...
    99+
    2023-06-28
  • Linux下jq命令怎么使用
    这篇文章主要介绍了Linux下jq命令怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux下jq命令怎么使用文章都会有所收获,下面我们一起来看看吧。jq 是一个轻量级的json处理命令。可...
    99+
    2023-06-27
  • Linux下怎么使用git命令
    本篇内容介绍了“Linux下怎么使用git命令”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Git(读音为/gɪt/)是一个开源的分布式版本...
    99+
    2023-06-28
  • Linux下怎么安装使用Node.js
    这篇文章主要介绍“Linux下怎么安装使用Node.js”,在日常操作中,相信很多人在Linux下怎么安装使用Node.js问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux下怎么安装使用Node.js...
    99+
    2023-06-27
  • Linux下vgscan命令怎么使用
    这篇文章主要讲解了“Linux下vgscan命令怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux下vgscan命令怎么使用”吧!vgscan命令 查找系统中存在的L...
    99+
    2023-06-28
  • Linux下waitpid()函数怎么使用
    在Linux下,waitpid()函数用于等待指定的子进程状态改变,它的原型如下:```#include #include pid_...
    99+
    2023-09-11
    Linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作