Mryqu's Notes


  • 首页

  • 搜索
close

[Linux] 判断可执行文件或动态库是否包含符号表

时间: 2013-10-24   |   分类: Tool   C++     |   阅读: 111 字 ~1分钟
在Linux下生成一个可执行文件或动态库,可以使用gcc/g++的"-g"选项使文件包含调试符号表。 要在Linux下判断一个第三方的可执行文件或动态库是否包含调试符号表,可以通过file命令实现: srv01> file libcurl.so.6 libcurl.so.6: ELF 64-bit LSB shared object, x86-64, version 1 (FreeBSD), dynamically linked, not stripped srv01> file /usr/bin/X11/curl /usr/bin/X11/curl: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked (uses shared libs), for FreeBSD 8.0 (800107), stripped 显示not stripped,表明文件带调试符号表;而显示stripped,表明文件已去除符号表。 如果文件包含调试符号表,可以通过objdump -t命令及选项打印文件的符号表: srv01> objdump -t libcurl.so.6 libcurl.so.6: file format elf64-x86-64 SYMBOL TABLE: 0000000000000120 l d .hash 0000000000000000 00000000000012b0 l d .dynsym 0000000000000000 0000000000004b08 l d .dynstr 0000000000000000 0000000000006f36 l d .
阅读全文 »

[C] GCC对UTF8 BOM的支持

时间: 2013-10-24   |   分类: Tool   C++     |   阅读: 112 字 ~1分钟
最近玩些特俗字符,结果对yqutest.cpp源码文件编译时先碰到error:converting to execution character set: Illegal bytesequence错误。GCC的源码字符集与执行字符集默认是UTF-8编码,为了避免源码文件乱码,最好也是采用UTF-8编码来存储源码文件。将源码编码转成UTF-8,问题得以解决。 但是否需要UTF-8 BOM(byte-order mark)呢? 我一时兴起添加了BOM,十六进制为EF BB BF,即对应八进制的357 273 277,编译结果如下: mryqu> g++ yqutest.cpp -o yqutst123 yqutest.cpp:1: error: stray '\357' in program yqutest.cpp:1: error: stray '\273' in program yqutest.cpp:1: error: stray '\277' in program yqutest.cpp:1: error: stray '#' in program yqutest.cpp:1: error: expected constructor, destructor, or type conversion before '<' token mryqu> g++ -v Using built-in specs. Target: amd64-undermydesk-freebsd Configured with: FreeBSD/amd64 system compiler Thread model: posix gcc version 4.
阅读全文 »

*nux下导出文件16进制内容的命令xxd

时间: 2013-10-24   |   分类: Tool   Linux     |   阅读: 16 字 ~1分钟
xxd命令可以导出文件的16进制内容,也能将16进制内容转换成2进制,还可以将内容导出成C语言变量,很不错的一个工具! 参考 xxd(1) - Linux man page 5 Unix Commands I Wish I’d Discovered Years Earlier

[C++] 从静态库获取GCC版本和编译平台

时间: 2013-10-24   |   分类: Tool   C++     |   阅读: 68 字 ~1分钟
获取GCC版本:strings -a {library} | grep “GCC: (” mryqu> strings -a libcurl.a | grep "GCC: (" GCC: (GNU) 4.4.5 20110214 (Red Hat 4.4.5-6) 获取编译平台信息:ar -x {library}file *.o mryqu> ar -x libcurl.a mryqu>file libcurl_la-url.o libcurl_la-url.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped 参考 How to retrieve the GCC version used to compile a given ELF executable? How to see the compilation platform of a static library file

用find和grep搜索特定目录下特定文件中的特定关键字

时间: 2013-10-23   |   分类: Tool     |   阅读: 10 字 ~1分钟
下例为递归搜索当前目录下所有以yqu为后缀的文件中的关键字123: find . -name "*.yqu" | xargs grep -H "123"

cut命令笔记

时间: 2013-10-22   |   分类: Tool   Linux     |   阅读: 77 字 ~1分钟
cut命令比较简单,但是也没测试过所有的选项,这里试一下没有细扣过的选项。 命令名 cut -- 对文件每一行的选定部分进行裁剪 概要 cut -b list [-n] [file ...] cut -c list [file ...] cut -f list [-d delim] [-s] [file ...] 描述 cut工具会从每个文件每一行裁剪出选定部分并写入标准输出。如果没有指定file参数,或file参数为单个破折号('-'),cut将从标准输入进行读取。list指定可以是列位置或特定字符分隔的字段序号,起始值为1。 list选项参数为逗号或空白字符分隔的数字或数字范围集合。数字范围可由数字+破折号('-')+第二个数字组成内包含范围。 数字和数字范围可以重复、重叠,但字段或列如果多次被选中,则仅显示一次。输入中没有选定的字段或列,不会报错。 N- 从第N个开始到所在行结束的所有字节、字符或列 N-M 从第N个开始到第M个之间(包括第M个)的所有字节、字符或列 -M 从第1个开始到第M个之间(包括第M个)的所有字节、字符或列 命令选项如下: -b list list指定字节位置。 -c list list指定字符位置。 -d delim 使用delim而不是制表符作为字段分隔符。 -f list list指定由字段分隔符(见-d选项)对输入分割后的字段。 输出字段由单个字段分隔符分开。 -n 不拆分多字节字符。 仅在多字节字符全部选中的情况下,字符才会被输出。 -s 抑制没有字段分隔符的行。如果没指定该选项的话,没有分隔符的行会原封不动地输出。 环境 环境变量LANG、LC_ALL和LC_CTYPE将影响cut的执行结果。 退出码 cut工具执行成功时返回0,执行出错时返回值大于0。 示例 从系统passwd文件抽取用户登录名和Shell(5),显示成''name:shell''对: cut -d : -f 1,7 /etc/passwd 显示当前登录用户的名称和登录时间: who | cut -c 1-16,26-38 个人体会 cut命令在unix/mac和linux/MinGW上实现并不一样。 cut命令在linux/MinGW上的实现忽略-n选项,此外通过GNU CoreUtils中的cut源码可知-b和-c选项实现是一样的,operating_mode变量都是枚举byte_mode,走的是cut_bytes函数。而unix/mac上的实现通过-n选项可以同时是否输出多字节字符的部分字节码。 cut命令在linux/MinGW上的实现还有–output-delimiter=STRING选项控制输出字符分隔符。

grep命令笔记

时间: 2013-10-22   |   分类: Tool     |   阅读: 149 字 ~1分钟
使用grep时一直没有使用什么命令选项,这里过一遍grep帮助,试一遍不明白的选项。 grep简介 grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 grep命令帮助 示例: grep -i 'hello world' menu.h main.c 正则选择和解释: -E, --extended-regexp PATTERN为扩展正则表达式(ERE) -F, --fixed-strings PATTERN是一套新行分割字符串 -G, --basic-regexp PATTERN为基本正则表达式(BRE) -P, --perl-regexp PATTERN为Perl正则表达式 -e, --regexp=PATTERN 使用PATTERN作为正则表达式 -f, --file=FILE 从文件中获得PATTERN -i, --ignore-case 忽略大小写 -w, --word-regexp 强制PATTERN仅匹配整个单词 -x, --line-regexp 强制PATTERN仅匹配整行 -z, --null-data 数据行以0字节而不是新行截至(打印整个文件了) 杂项: -s, --no-messages 抑制错误消息 -v, --invert-match 选择非匹配行 -V, --version 显示版本信息并退出 --help 显示该帮助并退出 -J, --bz2decompress 在进行搜索前解压缩bzip压缩输入 -Z, --decompress 在进行搜索前解压缩输入(HAVE_LIBZ=1) --mmap 如可能使用内存映射输入 输出控制: -m, --max-count=NUM 在NUM个匹配后停止工作 -b, --byte-offset 在输出行显示字节偏移 -n, --line-number 显示行号 --line-buffered 对每行都清除缓存强制输出 -H, --with-filename 对每个匹配结果显示文件名 -h, --no-filename 抑制输出中前缀的文件名 --label=LABEL 将LABEL作为标准输入的文件名显示(输入为管道有用) -o, --only-matching 仅显示行匹配PATTERN部分 -q, --quiet, --silent 抑制所有正常输出。通常用于脚本条件语句中,判断匹配结果是1还是0 --binary-files=TYPE 将二进制文件假定为类型,分别为'binary'、'text'或 'without-match'。默认为'binary',对二进制文件进行搜索 而不显示;'text',一概视为文本文件,搜索并显示; 'without-match',对二进制文件直接忽略,不搜索不显示。 -a, --text 等同于--binary-files=text -I 等同于--binary-files=without-match -d, --directories=ACTION 如何处理目录的操作项,分别为'read'、'recurse'或'skip'。 -D, --devices=ACTION 如何处理设备、FIFO和socket的操作项,分别为'read'或'skip'。 -R, -r, --recursive 等同于--directories=recurse --include=PATTERN 匹配PATTERN的文件将被检查 --exclude=PATTERN 匹配PATTERN的文件将被忽略 --exclude-from=FILE 匹配模式文件中PATTERN的文件将被忽略 -L, --files-without-match 仅显示不包含匹配的文件名 -l, --files-with-matches 仅显示包含匹配的文件名 -c, --count 仅显示每个文件匹配行数 --null 在文件名后显示0字节(跟不带这个选项就少一个冒号?) 上下文控制: -B, --before-context=NUM 输出匹配结果及其前NUM行 -A, --after-context=NUM 输出匹配结果及其后NUM行 -C, --context=NUM 输出匹配结果及其前后各NUM行 -NUM 等同--context=NUM --color[=WHEN], --colour[=WHEN] 使用标记突显匹配字符串,WHEN可为'always'、'never'或'auto' 默认项为'never','always'总是使用标记,而'auto'仅输出 在没有被管道到其他命令或重定向到文件时才使用标记。 -U, --binary 在行结尾EOL不除去回车换行CR字符(MSDOS) -u, --unix-byte-offsets 如果没有回车换行则报告字节偏移(MSDOS)

Xterm DISPLAY变量

时间: 2013-10-21   |   分类: Tool     |   阅读: 4 字 ~1分钟
DISPLAY变量的格式为[host]:<display>[.screen] host 指网络主机名,空缺则指本机。 每个主机可以有多个显示,每个显示可以有多个屏幕。因此,DISPLAY=:0通常指本机内的所有GPU,DISPLAY=:0.0指本机内的第一个配置屏幕/GPU,DISPLAY=:0.1指本机内的第二个配置屏幕/GPU。

Xming使用笔记

时间: 2013-10-21   |   分类: Tool     |   阅读: 15 字 ~1分钟
XWindow系统里有一个统一的Server来负责各个程序与显示器、键盘和鼠标等输入输出设备的交互,每个有GUI的应用程序都通过网络协议与Server进行交互。所以对于任何一个应用程序,本地运行和远程运行的差别仅仅是XServer的地址不同,别的没有差别。所以在Windows运行一个XServer,就可以很方便的远程运行有GUI的Linux应用了。 Xming是一个在Microsoft Windows操作系统上运行XWindow系统的服务器。它非常简单易用,搭配强大。一般搭配putty的下列配置,就可以在Windows平台上远程运行有GUI的Linux应用了: Connection-SSH-X11-Enable X11 forwarding Xming操作笔记如下: 选择单词:双击鼠标左键 选择一行:三击鼠标左键 选择特定文本:鼠标左键点击文本起点,然后按住鼠标右键选择。 复制文本:Alt + Shift + C

[Hadoop] hadoop job -list已废弃

时间: 2013-10-20   |   分类: BigData     |   阅读: 176 字 ~1分钟
执行hadoop job -list,显示该命令已废弃,不过还能执行成功。 ~$ hadoop job -list DEPRECATED: Use of this script to execute mapred command is deprecated. Instead use the mapred command for it. 看一下Hadoop 2.2.0的代码hadoop-common-project/hadoop-common/src/main/bin/hadoop: #hdfs commands namenode|secondarynamenode|datanode|dfs|dfsadmin|fsck|balancer|fetchdt|oiv|dfsgroups|portmap|nfs3) echo "DEPRECATED: Use of this script to execute hdfs command is deprecated." 1>&2 echo "Instead use the hdfs command for it." 1>&2 echo "" 1>&2 #try to locate hdfs and if present, delegate to it. shift if [ -f "${HADOOP_HDFS_HOME}"/bin/hdfs ]; then exec "${HADOOP_HDFS_HOME}"/bin/hdfs ${COMMAND/dfsgroups/groups} "$@" elif [ -f "${HADOOP_PREFIX}"/bin/hdfs ]; then exec "${HADOOP_PREFIX}"/bin/hdfs ${COMMAND/dfsgroups/groups} "$@" else echo "HADOOP_HDFS_HOME not found!
阅读全文 »
51 52 53 54 55 56 57 58 59

Programmer & Architect

662 日志
27 分类
1472 标签
RSS 订阅
GitHub Twitter FB Page
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%