glibc

/lib64/libc.so.6: version `GLIBC_2.7' not found 解决方案

房东的猫 提交于 2020-02-28 00:56:35
Linux开发中,新旧版本不同的系统会遇到的一个很大问题是--兼容性。一般情况是旧系统编译的程序可以在新系统中运行,但是反过来新系统中编译的程序在旧系统中就不行了。 最明显的现象是高版本编译的程序在低版本系统中出现错误: /lib64/libc.so.6: version `GLIBC_2.7' not found 当然这个版本号码不一定是本文中的7 还有14也是个新版本,这要看你编译时的系统的版本了。 出现这个问题后我们首先需要确定是那些函数在当前系统(低版本的)中找不到,此处使用 objdump 命令,此处假设我们的应用程序名称为app,则 objdump -T app | grep GLIBC_2.7 (这个号码是上面出错的号码),得到了如下结果 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.7 __isoc99_sscanf 然后根据这个我们再看看当前系统有这个函数的哪个版本,命令如下 objdump -T /lib64/libc.so.6 | grep sscanf 得到如下结果 0000003e3685f050 g DF .text 0000000000000090 GLIBC_2.2.5 _IO_sscanf 0000003e3685f050 g DF .text 0000000000000090 GLIBC_2

将redhat的yum换成centos的yum

送分小仙女□ 提交于 2020-02-27 19:36:29
1.卸载redhat自带的yum组件 [root@localhost ~]# rpm -qa|grep yum|xargs rpm -e --nodeps 2.查看系统版本 [root@localhost ~]# lsb_release -a 显示为:Red Hat Enterprise Linux Server release 6.1 于是找对应的CentOS6.1 但是在 http://mirrors.ustc.edu.cn/centos/6.0/readme 看到 This directory (and version of CentOS) is depreciated. For normal users, you should use /6/ and not /6.0/ in your path. Please see this FAQ concerning the CentOS release scheme: http://www.centos.org/modules/smartfaq/faq.php?faqid=34 If you know what you are doing, and absolutely want to remain at the 6.0 level, go to http://vault.centos.org/ for packages.

CentOs安装MySQL 5.7

戏子无情 提交于 2020-02-27 01:58:08
安装 MySQL5.7 安装MySQL 1 、下载安装包 下载地址 https://dev.mysql.com/downloads/mysql/5.7.html 选择如下选项 下载64位版本 2 、卸载系统自带的Mariadb 查询出已安装的mariadb,执行如下命令: rpm -qa|grep mariadb 通过上面的命令如果查询已经安装了mariadb,执行如下命令卸载: yum -y remove 文件名 (注:文件名为用上面命令查出的名称) 3 、删除etc目录下的my.cnf文件,如果存在。 rm /etc/my.cnf 4 、 执行以下命令来创建mysql用户组 groupadd mysql 5 、执行以下命令来创建一个用户名为mysql的用户并加入mysql用户组 useradd -g mysql mysql 6 、将下载的二进制压缩包上传至 /usr/local 目录下 7 、解压安装包,命令: tar -zxvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz 8 、将解压好的文件夹重命名为mysql,命令: mv mysql-5.7.21-linux-glibc2.12-x86_64 mysql 9 、进入重命名以后的mysql目录,命令: cd /usr/local/mysql 10 、创建 data 目录,命令:

Linux下安装JDK

纵然是瞬间 提交于 2020-02-27 01:50:20
01-卸载OpenJDK CentOS版的Linux系统中,含有默认的jdk,若需要安装其他版本的jdk,可以先卸载默认的jdk。 执行命令查看 查看命令:rpm –qa | grep java 卸载OpenJDK 卸载命令:rpm -e --nodeps 要卸载的包名称 02-创建JDK安装路径 在/usr/local/ 创建文件夹java 创建命令 :mkdir java 03-下载上传工具 **上传工具:**FileZilla 或 其他 百度网盘 **工具下载:**链接: https://pan.baidu.com/s/1Bbu6BhvZrjHxEqaVqmat1Q **提取码:**zjpy 官网 https://filezilla-project.org/ 04-上传JDK到linux并解压 下载Linux版jdk 百度网盘:链接: https://pan.baidu.com/s/1q9OADKF2hiwKmhRBsN0JEw 提取码:ztse 官网: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装依赖 (需要联网) 安装命令:yum install glibc.i686 解压到指定目录 解压命令:tar –xvf jdk8-8u241-linux

glibc升级GLIBC_2.14,一定不要mv libc.so.6 libc.so.6_bak……

假装没事ソ 提交于 2020-02-26 18:47:26
背景: 首先说一下背景,源于年前的一次libc的升级。再迁移打包机环境时遇到了报错/lib64/libc.so.6: version `GLIBC_2.14' not found 报错很明显,直接安装了对应的版本libc-2.14.so。然后按照网上的操作进入/lib64/,想着将当前的版本覆盖到旧版本libc-2.12.so上 然后就脑抽没有注意到libc.so.6实际是个软链到正确版本的,还想着先mv 备份一下,再copy回来一个高版本…… 一定不要执行的操作:mv libc.so.6 libc.so.6_bak 然后悲剧了!!!mv命令、ll命令等完全不能操作了libc.so.6:cannot open shared object file 幸运的是,我没有退出机器时就发现了这个问题,据说如果是退出了,就需要另一个操作流程了…… 恢复办法:重新设置一个libc.so.6链接文件 LD_PRELOAD=/lib64/libc-2.14.so ln -f -s /lib64/libc-2.14.so libc.so.6 注意: libc-2.14.so 是你本地已有的一个版本 说明:LD_PRELOAD用于动态库加载,可以加载该库并执行ln命令 来源: https://www.cnblogs.com/meitian/p/12368336.html

答网友问:嵌入式Linux执行程序提示Not found的解答

若如初见. 提交于 2020-02-26 18:06:05
某日,网友不会飞的骆驼问了我一个问题。在嵌入式Linux系统中执行./a.out时,提示找不到,信息如下: $ ./a.out -sh: ./a.out: not found 1 2 找了点资料,帮解决了。 问题重现 我在板子上重现了问题。的确如上所述。 使用file命令查看a.out属性,信息如下: file ./a.out ./a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=89b9b01541d4f84bfba73ce649cdd2982bb3840e, stripped 1 2 从信息上看,a.out是32位ARM系统程序,动态链接,解析器为/lib/ld-linux-armhf.so.3。但是,在板子上查看该文件: $ ls /lib/ld-linux* /lib/ld-linux.so.3 1 2 可以看到只有ld-linux.so.3,找不到前面提到的ld-linux-armhf.so.3,所以执行程序时提示not found。 造成这个问题的原因是:板子上的系统所用的链接器版本

docker 镜像中文支持问题

走远了吗. 提交于 2020-02-26 11:00:12
* Docker解决中文乱码实践 问题 在公司使用dockers镜像中遇到一个问题,同事的python代码中使用 xx_str.encode('utf-8')在包含中文路径时报出异常,但在开发环境中没有遇到。 ps. 在开发中不要使用中文传递参数 排查步骤 # 分别在开发环境和docker容器中执行 locale -a # 可以查看到docker环境仅包含posix编码,开发环境包括utf-8 # 调用python命令行执行: sys.getdefaultencoding() # 也可以发现两者的区别 尝试解决 由于同事无法直接提供Dockerfile,只能在他的镜像基础上做修改, 制作如下的Dockerfile FROM XXX # 同事的镜像名 RUN yum install kde-l10n-Chinese -y &&\ yum reinstall glibc-common -y &&\ localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 ENV LANG zh_CN.UTF-8 WORKDIR /home/xxxx # 指定原先的工作路径 COPY run.sh . #新增一个启动脚本 EXPOSE 8080 ENTRYPOINT ["/bin/bash","run.sh"] 安装步骤 docker build -t xxx #创建新镜像

Linux 静默安装 oracle

偶尔善良 提交于 2020-02-26 02:53:59
1.准备安装包 linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip rlwrap-0.30.tar.gz 2.安装依赖关系 先建立本地yum源(略) 1)检查依赖包是否完全 //查看已经安装的包 rpm -qa binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel expat gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers libaio libaio-devel libgcc libstdc++ libstdc++-devel make pdksh sysstat unixODBC unixODBC-devel //查看已安装和未安装的包 rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel expat gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers libaio libaio-devel libgcc libstdc++ libstdc++-devel make pdksh sysstat

centos8:golang build 独立打包 + 缩小编译后体积

冷暖自知 提交于 2020-02-25 21:21:17
golang编译后的文件通常较大,依赖文件也众多,为了简化分发,决定:1、将编译成独立一体的可执行文件,2、减少体积。 测试用例,reader.go(内容不重要,甚至包括了cgo) go build reader.go ldd reader 发现有不少依赖包,在整体打包前,还需要确认是否安装了glibc-static,否则会出错 # dnf --enablerepo=PowerTools install glibc-static # go build -ldflags '-linkmode "external" -extldflags "-static" -w -s' reader.go # upx -9 reader 设置编译参数-ldflags '-linkmode "external" -extldflags "-static"‘,实现整体打包; 设置编译参数-ldflags "-w -s"。其中-w为去掉调试信息(无法使用gdb调试),-s为去掉符号表,可有效减少编译后体积(一般能缩小30+%); upx -9,直接将3MB多的文件压倒800KB。(upx需要独立安装, https://github.com/upx/upx/releases ) 来源: oschina 链接: https://my.oschina.net/faramita/blog/3163856

shellcode与系统安全

不羁的心 提交于 2020-02-25 16:13:59
shellcode与系统安全 http://tommwq.tech/blog/shellcode-and-security/ 1. 避免shellcode中出现0x00的方法 2. 获取shellcode地址 3. 向函数传递参数 4. 部分Linux系统调用 4.1. execve(32位) 5. 将二进制文件转换为C语言字符串 6. 一个简单的shellcode 7. 一些辅助函数 8. 一个简单的缓冲区溢出示例 9. 示例2:缓冲区溢出攻击 10. 缓冲区溢出攻击的基本流程 11. 数据执行保护和绕过 12. 示例3:绕过DEP 13. ROP 14. 示例4:ROP 15. 思考 1 避免shellcode中出现0x00的方法 使用 xor eax, eax 代替 mov eax, 0x00 。 使用 xor eax, eax; mov al, 0x01 代替 mov eax, 0x01 。 2 获取shellcode地址 从逻辑上看, call target 等效于 dec esp mov [esp], eip jmp target 因此,执行call指令可以将下一条指令的地址写入栈。在call之后执行 pop eax 就可以将目标地址保存到eax中。call分为near call和far call,near call使用的是段内的相对地址