仅适用于CentOS7,慎用 #!/bin/bash array=($(ls /etc/sysconfig/network-scripts)) path=/etc/sysconfig/network-scripts/ name=ifcfg-eth0 file="`echo ${array[*]} | grep -o 'ifcfg-ens[[:digit:]]\+'`" judge() { if [ -f $path$file ]; then echo "the net name is not
如果编译时,报如下所示错误: ../../third-party/hadoop/lib/libhdfs.a(jni_helper.c.o): In function `getGlobalJNIEnv': /root/hadoop-2.4.0-src/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/jni_helper.c:446: undefined reference to `JNI_GetCreatedJavaVMs' /root/hadoop-2.4.0-src/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/jni_helper.c:505: undefined reference to `JNI_CreateJavaVM' /root/hadoop-2.4.0-src/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/jni_helper.c:505: undefined reference to `JNI_CreateJavaVM' 是因为链接时,没有加上库文件libjvm.so。加上libjvm.so重编译,如果又遇到如下所示的错误: ../../third-party/libjvm.so: file not recognized: File format not recognized 这问题是因为libjvm.so不能被识别,libjvm.so的版本过高导致的 nm ../../third-party/libjvm.so | grep JNI_CreateJavaVM nm: ../../third-party/libjvm.so: 不可识别的文件格式 查看nm的版本: nm --version GNU nm 2.16.91.0.5 20051219 (SUSE Linux) Copyright 2005 Free Software Foundation, Inc. 本程序是自由软件;您可以按照 GNU 通用公共许可证 的条款对其进行再发行。本程序没有任何担保。 现在换成高一点的版本试试: ./nm --version GNU nm 2.17.50.0.6-20.el5 20061020 Copyright 2005 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License. This program has absolutely no warranty. 再次执行,一切正常,需要升级ld了,或者降低JRE或JDK的版本试试: ./nm libjvm.so | grep JNI_CreateJavaVM 00000000006307c0 T JNI_CreateJavaVM
awk、grep、sed是linux操作文本的三大利器,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。
拿到一个编译好的可执行文件,你能获取到哪些信息?文件大小,修改时间?文件类型?除此之外呢?实际上它包含了很多信息,这些你都知道吗?
在使用动态库开发部署时,遇到最多的问题可能就是 undefined symbol 了,导致这个出现这个问题的原因有多种多样,快速找到原因,采用对应的方法解决是本文写作的目的。
-E, --extended-regexp PATTERN 是一个可扩展的正则表达式(缩写为 ERE)
再次配置,就成功了 [root@h101 daq-2.0.6]# ./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... gawk checking whether make
在Linux中,可执行文件的格式是ELF格式,而有一些命令可以帮助我们了解它们更多的“秘密”,以此来帮助我们解决问题。
"本文从编译、二进制程序文件和运行角度逐级解析了 Linux C 语言程序中几种变量类型"
我们发现出现了链接问题,说const_int没有定义的引用,但我们确实在const.cc文件中定义了。
摘要:当程序运行出现段错误时,目标文件没有调试符号,也没配置产生 core dump,如何定位到出错的文件和函数,并尽可能提供更详细的一些信息,如参数,代码等。 第一板斧 准备一段测试代码 018.c #include <stdio.h> int main(int argc, char *argv[]) { FILE *fp = NULL; fprintf(fp, "%s\n", "hello"); fclose(fp); return 0; } 编译运行 $ gcc 0
Shell正则表达式:使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,Linux上的一些编辑器就支持 例如:vi, grep, awk ,sed,expr等等工具,因为她们有支持正规表示法,所以这些工具就可以使用正规表示法的特殊字符来进行字符串的处理;
Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题。本文将简单介绍一下这些命令。
项目当前使用的ubuntu版本是 18.04(如何查看当前linux版本见文章最后), 默认安装的gcc版本是7.5.0, 在这环境编译出来的deb包在银河麒麟v10 sp1系统上可以兼容,但是在银河麒麟v10 的OS上会出现兼容性的问(原因是银河麒麟v10上运行的deb需要使用gcc 5进行编译),因此需要在ubuntu 18.04版本上安装gcc 5 的版本
: 我需要在我的Ubuntu主机上建立一个Linux网桥,共享一个网卡给其他一些虚拟主机或在主机上创建的容器。我目前正在Ubuntu上使用网络管理器(Network Manager),所以最好>能使用网络管理器来配置一个网桥。我该怎么做?
这些是编程语言中的基本概念,如果你还不是非常明确地清楚标题的问题,并且不知道作用域,链接属性,存储期等概念的具体含义,那么本文你不该错过。为了更加清晰的理解我们的问题,需要先了解三个概念:作用域,链接属性,存储期。
今天在虚拟机下在学习scapy的东西,其中一个例子中需要安装一个python的visual模块,期间报了N多的错误,一个个解决其中的依赖问题,到后面被卡住了
要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在 Linux 系统中,设置路由通常是为了解决以下问题:该 Linux 系统在一个局域网中,局域网中有一个网关,能够让机器访问 Internet,那么就需要将这台机器的 IP 地址设置为 Linux 机器的默认路由。
(匹配宽度为零,满足一定的条件/断言) 零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像 \b ^ $ < > 这样的锚定作用,用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。 断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。
1:Storm作为一个实时处理的框架,产生的消息需要快速的进行处理,比如存在消息队列ZeroMQ里面。 由于消息队列ZeroMQ是C++写的,而我们的程序是运行在JVM虚拟机里面的。所以需要jzmq这个桥梁来黏合C++程序接口和Java程序接口。 ZeroMQ的官方网址:http://zeromq.org/ 1:MetaQ(全称Metamorphosis)是一个高性能、高可用、可扩展的分布式消息中间件,思路起源于LinkedIn的Kafka,但并不是Kafka的一个Copy。MetaQ具有消息存储顺序写、吞
将获取的IPA文件后缀改为rar,然后解压缩会得到一个payload文件夹,里面会有一个后缀为app的文件。同样在终端进入此文件夹:
注释:如果输出的信息中有vmx,说明intel处理器支持完全虚拟化。如果显示svm,说明是AMD的处理器支持虚拟化。
2.执行phpize命令,phpize命令在PHP安装目录的bin目录下,如/usr/local/php/bin/phpize。
yum install -y kvm virt-* libvirt bridge-utils qemu-img 是否加载模块 lsmod |grep kvm 编辑网卡 [root@node01 ~]# cd /etc/sysconfig/network-scripts/ [root@node01 network-scripts]# cp ifcfg-eth0 ifcfg-br0 [root@node01 network-scripts]# vim ifcfg-eth0 DEVICE=eth0 TYPE
安装要求:安装后的虚拟机用于服务器,因此要最小化安装,不要安装多余的软件,也不需要安装图形化界面。
Question: Recently I have to use the RHEL and need to config the network with a few NICs. Here
最近使用 WebRTC 开发一个实时直播项目,在调试的时候发现一个特别奇怪的现象,将编译好的 WebRTC 静态库文件加入到我们自己的工程里之后无法进行单步调试。每次调到 WebRtc 里都会变成汇编语言,如果如下:
KVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。 KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。
在一次问题排查过程中,误杀了yarn任务container的其中一个进程,导致yarn application kill不再生效,并且在rm中任务状态显示为失败,但实际进程还在运行。在分析问题的同时,抽时间对yarn任务的进程、以及kill命令的执行流程进行了整理。本文就来聊聊这些内容。
最近在写一个Makefile,调试时遇到了libsrcpbl.so: undefined reference to gcProgramName的问题。在这个Makefile脚本里面,终极目标是通过链接一个自定义的动态库libsrcpbl.so生成一个ELF目标文件。
再次配置,就成功 [root@h101 snort-2.9.7.6]# ./configure --enable-sourcefire checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... g
今日问题:symbol 不存在 : symbol lookup error: ./libinterface.so: undefined symbol: _ZN10CMySQLItem13ExecuteDirectEPKcmi 一般是没有引用第三方库 没有编译好 今天竟然耗费如很长时间解决 记录一下 解决过程: 如何判断一个函数来源编译的那个库 并且包含在改库中 因为一个动态库引用了很多其他库 (静态库和动态库) 搜索这个函数在那个.h .cpp如何实现的 2 问题升级
工作原因有时候会用python写写测试工具,感受到其快速实现应用的便利,但由于偏底层开发,主力语言依然是C。对于开发语言没有什么优劣概念,在特定的情景下哪种实现更佳就用哪种,工具合适才是最好的。
服务器部署会经常用到linux,很多时候都是用的时候上网查一下指令,然后用完过不了多久就忘记了,因此本文记录一些自己常用的linux指令,以作备忘。并不断添加。
机房一台centos6.9机器部署了jenkins发布系统,开发人员在用node编译js,发现依赖的gcc版本低了,故需要将gcc升级到高版本(至少5.0版本以上),这里选择升级到6.4.0版本,下面是升级的操作记录:
因业务需要,需要连接其它系统所使用的Microsoft SQL Server数据库,然后要使用PDO ODBC才能连接,但现在所使用的PHP环境没有装这个扩展,经过一系列踩坑,整理出了下面的教程。
笔者在最近的安全沙龙上,同僚们表现出对应急响应方法论的渴求。所以我想通过真实案例来讲一下应急响应周期建设,以起到抛砖引玉之效,给大佬们的工作带来参考价值。
pwdx - report current working directory of a process,格式:pwdx pid 内存分析工具 valgrind valgrind辅助工具 qcachegrind 可视化查看valgrind结果 淘宝DBA团队发布的监控脚本,使用perl开发,可以完成对linux系统和MySql相关指标的实时监控 orzdba 取指定进程名的pid pidof 进程名 性能瓶颈查看: perf top -p pid 查看调用栈: pstack pid https://www.percona.com/ 查询程序执行聚合的GDB堆栈跟踪,先进性堆栈跟踪,然后将跟踪信息汇总: pt-pmp -p pid 格式化explain出来的执行计划按照tree方式输出,方便阅读: pt-visual-explain 从log文件中读取插叙语句,并用explain分析他们是如何利用索引,完成分析之后会生成一份关于索引没有被查询使用过的报告: pt-index-usage 其它: vmstat tcpdump 网络数据包分析器 显示包的内容: tcpdump -i eth1 -n -vv -x -e -s 600 # 仅二进制 tcpdump -i eth1 -n -vv -X -e -s 600 # 二进制和文本 抓包保存到文件供Wireshark分析: tcpdump -i eth1 -n -vv -X -e -s 600 -w x.cap 抓取192.168.31.1的80端口的包 tcpdump -i eth1 host 192.168.31.1 and port 80 抓取目标IP为192.168.31.1和目标端口为80端口的包 tcpdump -i eth1 dst host 192.168.31.1 and dst port 80 -s 指定显示多少字节的包内容 objdump nm ldd strings iostat 输入/输出统计 ifstat 网络流量实时监控工具 vmstat 虚拟内存统计 sar (System Activity Reporter系统活动情况报告,最为全面的系统性能分析工具之一) iptraf 实时IP局域网监控 iftop 网络带宽监控 htop 进程监控 iotop 磁盘I/O监测工具 fuser 使用文件或文件结构识别进程 lsof 打开文件列表 dmesg slabtop free slurm 查看网络流量 byobu 类似于screen tmux 终端复用工具,类似于screen screen 在多个进程之间多路复用一个物理终端的窗口管理器 dtach 用来模拟screen的detach的功能的小工具 dstat 可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品 NetHogs 监视每个进程的网络带宽 MultiTail 同时监控多个文档、类似tail Monitorix 系统和网络监控 Arpwatch 以太网活动监控器 Suricata 网络安全监控 Nagios 网络/服务器监控 Collectl 一体化性能检测工具 mtr 网络连通性判断工具,集成了traceroute和ping socat 多功能的网络工具(Socket CAT,netcat加强版) netpipes socket操作 ab wget curl tsung 压力测试工具 siege 压力测试和评测工具 nmon 监控Linux系统性能 psacct 监视用户活动 ncdu 基于ncurses库的磁盘使用分析器 slurm 实时网络流量监控 findmnt 查找已经被挂载的文件系统 saidar 系统数据监控和统计工具 ss 可以替代netstat的网络连接查看工具(socket statistics) ccze 用不同颜色高亮日志协助管理员进行区分和查看分析 netstat 网络统计 ifconfig (ifup ifdown) Linux磁盘相关命令 sfdisk -l sfdisk -s fdisk -l dmesg |grep SCSI dmesg |grep -i raid df -h cat /proc/scsi/scsi hdparm /dev/sda mount 加载一块硬盘 mkfs 创建文件系统 /etc/fstab 文件内容mount命令输出一致 lscpu 查看CPU lspci
话说刚才生成一个私钥的时候, Python3绑定libssl1.1 又崩了;正在痛苦思考中~~~
想象一下,尽管无法访问软件的源代码,但仍然能够理解软件的实现方式,在其中找到漏洞,并且(更好的是)修复了错误。 凡此种种都源于二进制形式。 听起来像是拥有超能力,不是吗?
http://blog.163.com/xychenbaihu@yeah/blog/static/13222965520101023104745738/
如何在C++代码中调用写好的C接口?你可能会奇怪,C++不是兼容C吗?直接调用不就可以了?这里我们先按下不表,先看看C++如何调用C代码接口。
问题 声明和定义区别 definition declared 微信排版支持makdown语法不友好 可以查看原文链接 先看一下 例子1 编译有没有问题? class B{private: A* m_pData;}; 编译很明显出现错误::没有 声明 error: ‘A’ has not been declared error: ‘A’ does not name a type 例子2 编译有没有问题 class A;class B{private: A* m_pData;}; 编译没
共享存储配置 (1).添加一块1G硬盘 (2).为了能不重启虚机的情况下,特作以下操作 [root@node0 host2]# grep mpt /sys/class/scs
我正在开发一个静态库,并使用 Polidea 的 iOS Class Guard 来混淆我的静态库。我按照步骤在项目的根路径中下载 obfuscate_project,更改其中所需的名称,最后在终端中运行 bash obfuscate_project。我收到一条消息,说我的构建成功,但我找不到我的symbols.h 文件。我还注意到生成了一个构建文件夹。我的问题是,混淆真的发生了吗?如果是这样,我该如何检查?混淆的项目是否在我的构建文件夹中?
上图是改进之后的搜索效果,wordpress的搜索按照网上的说法做的比较烂,貌似是全字段匹配,于是搜索上面的关键词”ida调试器”就出现了下面的状况,啥都没有:
在边学习 ctf 的过程中,大佬叫我们可以去做题目,边做题边积累,picoCTF 是面向美国高中生的 ctf 比赛,比较基础,适合我这种弱鸡,在做完了基础部分后觉得自己的认知增进不少,就写个 writeup 来记录一下解题过程,本篇文章会持续更新。
frida-unpack是一个基于frida的脱壳工具,项目地址:https://github.com/chzphoenix/frida-unpack
领取专属 10元无门槛券
手把手带您无忧上云