目录
Windows 、Linux、下查看符号表,dumpbin、readelf、objdump用法
SVN基本操作,checkin \check out\ update\add
CISC:x86、x86_64-litte
RISC:Arm、MIPS(龙芯)、PowerPC-big
mips阵营:龙芯
arm阵营: 飞腾,海思麒麟
IBM powerpc阵营:
宏芯x86:兆芯,申威
计算机字长(机器字长)取决于数据总线的宽度,通常就是CPU一次能处理的数据的位数(CPU位数)。
Big Endian:低字节存储在高地址
eg:PowerPC、IBM、Sun
Little Endian:低字节存放在低地址
eg:x86、DEC.
uname -m
总的逻辑 cpu 数 = 物理 cpu 数 * 每颗物理 cpu 的核心数 * 每个核心的超线程数
cat /proc/cpuinfo|grep "physical id"|sort -u|wc -l
查看物理CPU个数
cat /proc/cpuinfo|grep "cpu cores"|uniq
查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo|grep "processor"|wc -l
查看逻辑CPU的个数
cat /proc/cpuinfo|grep "name"|cut -f2 -d:|uniq
查看CPU的名称型号
ps -eo pid,args,psr
查看进程运行的逻辑CPU
taskset -c [CPU NUMBER] -p PID
指定cpu
- mov ecx, Addend;
- mov eax, 0FFFFFFFFh;//-1 (mov eax, 1;)//+1
- lock xadd [ecx], eax; //加-1
- dec eax;
- mov ecx, Destination;
- mov edx, Exchange;
- mov eax, Comperand;
- lock cmpxchg [ecx], edx;
- -selector-tag">mov -selector-tag">ecx, -selector-tag">Target;
- -selector-tag">mov -selector-tag">edx, -selector-tag">Value;
- -selector-tag">label:
- -selector-tag">lock -selector-tag">cmpxchg [ecx], -selector-tag">edx;//加
- -selector-tag">jnz -selector-tag">short -selector-tag">label;
操作系统 提供了3类型的接口供用户使用:
名称 | 厂商 |
posix | IEEE |
中标麒麟(NeoKylin) | 银河麒麟操作系统 | inux(Deepin) | 普华操作系统 | 中科方德操作系统 |
中兴新支点操作系统 | 一铭操作系统 | 优麒麟(UbuntuKylin) | 湖南麒麟 Kylinsec | startOS(起点操作系统) |
共创Linux桌面操作系统 | 威科乐恩Linux(WIOS) | 恩普操作系统 | UOS 统一操作系统 | 红旗Linux |
实时操作系统的实时性是第一要求,需要调度一切可利用的资源完成实时任务。根据响应时间在微秒、毫秒和秒级的不同,可分为强实时、准实时和弱实时三种。强实时系统必须是对即时的事件作出反应,绝对不能错过事件处理时限。
实时操作系统:VxWorks、mC/OS-II、RT-Linux、QNX
非实时操作系统:Linux/Windows
查看时间:date
设置时间(年月日):date -s 3/29/2021 (其中-s 指的是set)
设置时间(时分秒):date -s 15:52:36
设置时间(年月日时分秒) :date -s "2022-3-29 18:44:02"
查看时区: date -R
关闭网络时间协议同步时间:sudo timedatectl set-ntp false
修改时区:timedatectl set-timezone “Asia/Shanghai”
修改时区:timedatectl set-time '16:10:40 2015-11-20'
- useradd 用户名称 // 添加用户
- passwd 用户名称 // 修改用户密码
- chmod [who] [+ | - | =] [mode] 文件名
将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
find . -name "*.c"
将当前目录及其子目录中的所有文件列出:
find . -type f
将当前目录及其子目录下所有最近 20 天内更新过的文件列出:
find . -ctime 20
ssh user@remote -p port
// 保证对端机器打开sshd服务,使用 systemctl status sshd.service 查看
桌面工具,粘贴两个链接
VNC的安装与使用(Windows环境下使用VNC进行远程桌面控制) - 简书
不过使用vnc client要注意,一定不能让目标主机磁盘占用过大,不然会导致 vnc server服务无法启动从而连接失败
磁盘:df -h
内存:sar -r
进程:ps -elf
线程:ps -T -p 20756、top -H -p 20756或者 top 一键搞定
- uname -r // 操作系统
- ldd --version // glibc
- gcc --version // gcc
-
- // 跨平台交叉编译时需要
kill -9 PID
Windows:
程序-查看事件日志
Linux:
/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
/var/log/wtmp 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件
程序必须以下面的行开始(必须方在文件的第一行):
!/bin/sh
符号!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 (能写一些shell普通命令,命令用分号隔开)
- !bin/sh
- echo "==============================================="
- echo "================启动 ***==================="
- echo "==============================================="
- start-all.sh;
chvt N
cout的输出可以重定向到一个文件中,而cerr必须输出在显示器上。cerr不经过缓冲区,直接向显示器输出信息,而clog中的信息存放在缓冲区,缓冲区满或者遇到endl 时才输出。缓冲区的的,就是减少访问文件的次数。
-nostdinc 使编译器不再系统默认的头文件目录里面找头文件, 一般和 -I 联合使用,明确限定头文件的位置。
-llibrary 制定编译的时候使用的库
-O0 、-O1 、-O2 、-O3
编译器的优化选项的 4 个级别,-O0 表示没有优化, -O1 为默认值,-O3 优化级别最高。
gcc中指定优化级别的参数有:-O0、-O1、-O2、-O3、-Og、-Os、-Ofast。
gcc -Q --help=optimizers -O3
查寻O3参数具体做了哪些优化
以gcc为例:
-finput-charset 设置输入字符集,用于从输入的字符集转换,默认为utf8。
-fexec-charset=charset 设置执行字符集。决定了字符串常量在内存中的编码。默认为utf8。
输入字符集决定了源码到内部字符集的转换方式。源码存储方式如果为gbk,且编译器指定的输入字符集为gbk。在将c语言编译为汇编时,会将源码字符集转换为内部utf-8。
执行字符集决定了由内部字符集到执行字符集的转换方式。如果设置为gbk,在将汇编语言翻译成机器语言时,会将字符串常量从内部字符集utf-8向gbk转换。
如果二者都为utf-8,由于gcc内部字符集也为utf-8,不会发生转换。内存中的字符串常量的编码直接取决于源码的编码。
dumpbin
dumpbin.exe /SYMBOLS <file(.lib)>
readelf
readelf -s <file>
objdump
objdmp -t <file(.so)>
nm
nm -D <file> // 查村符号并支持反译为函数名
- ldd <filename> // linux
-
- denpends 软件打开可执行文件或者动态库查看依赖 // windows
- -meta"> gdb <file> // 进入到gdb命令行中
- -meta"> set logging file <filename> // 设置输出文件
- -meta"> set logging on // 开始拷贝
- -meta"> thread apply all bt // 查看所有线程堆栈并输出到文件中
- -meta"> set logging off // 停止拷贝
GDB
- break | b | 添加断点
- tbreak | tb | 添加临时断点
- delete | d | 删除断点
- enable | enable | 启用某个断点
- disable | disable | 禁用某个断点
GDB
- run | r | 运行一个待调试的程序
- continue | c | 让暂停的程序继续运行
- next | n | 运行到下一行
- step | s | 单步执行,遇到函数会进入
- until | u | 运行到指定行停下来
- finish | fi | 结束当前调用函数,回到上一层调用函数处
- return | return | 结束当前调用函数并返回指定值,到上一层函数调用处
- jump | j | 将当前程序执行流跳转到指定行或地址
- print | p | 打印变量或寄存器值
- backtrace | bt | 查看当前线程的调用堆栈
- frame | f | 切换到当前调用线程的指定堆栈
- thread | thread | 切换到指定线程
- break | b | 添加断点
- tbreak | tb | 添加临时断点
- delete | d | 删除断点
- enable | enable | 启用某个断点
- disable | disable | 禁用某个断点
- watch | watch | 监视某一个变量或内存地址的值是否发生变化
- list | l | 显示源码
- info | i | 查看断点 / 线程等信息
- ptype | ptype | 查看变量类型
- disassemble | dis | 查看汇编代码
- set args | set args | 设置程序启动命令行参数
- show args | show args | 查看设置的命令行参数
GDB
- print | p | 打印变量或寄存器值
- backtrace | bt | 查看当前线程的调用堆栈
- watch | watch | 监视某一个变量或内存地址的值是否发生变化
gdbserver、VsCode、qtcreator、VS2010、VisualGDB
qtcreator
直接将想要调试的文件拖进qt中,但必须保证代码版本一致(带界面)
GDB
- (gdb) whatis tmp
- -variable">type -operator">= double
- (gdb) p tmp
- -variable">$4 -operator">= 13
- (gdb) set var tmp=47
不能直接使用set tmp=47,因为set的子命令可能跟变量名冲突导致运行错误
set {-bu
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
添加我为好友,拉您入交流群!
请使用微信扫一扫!