gdb调试有管道的命令行

以pcre2调试为例

1
2
3
4
5
6
7
8
9
#!/bin/sh
 
cd `pwd`/installed/bin
 
mkfifo /tmp/pcre
echo "<h1>hello</h1>" > /tmp/pcre &
 
gdb ./pcre2grep -ex 'b main' -ex 'r -o "<.*>" < /tmp/pcre'
rm /tmp/pcre

refer to:
http://www.voidcn.com/article/p-migwptlv-bsq.html

西欧名字中的单词

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
van = von = de = of = from
la = le = les
Boer: 农民
Bakker: 面包师
Schoenmaker: 鞋匠
Hoedemaker: 制帽匠
Visser: 渔夫
Kuip: 篾匠
Bruier: 酿酒师
Bosman: 伐木工
Beek: 小溪
Dam: 坝
Dijk: 堤
Hoek: 角落
Berg: 小山包
Philip: 爱马者
Paul: 小个子
Patrick: 高贵的
Rex: 帝王
Richard/Ricky: 严厉的统治
Charlie查理 = carl卡尔in德国 = carlos卡洛斯in西班牙
Louis路易 = Ludwig路德维希in德国
Calf: 牛犊

refer to:
https://zhidao.baidu.com/question/111534700.html
https://zhidao.baidu.com/question/118073174.html

gcc多个include目录的优先级

gcc默认include路径

1
2
`gcc -print-prog-name=cc1` -v
`g++ -print-prog-name=cc1` -v

优先级由大到小对应下表中的从上到下

1
2
3
4
5
命令行-I指定,前面的大于后面的
CPATH
CPLUS_INCLUDE_PATH	#只对c++文件起作用
C_INCLUDE_PATH		#只对c文件起作用,即C_INCLUDE_PATH和CPLUS_INCLUDE_PATH不会同时起作用
gcc默认include路径

refer to:
http://www.3scard.com/index.php?m=blog&f=view&id=42

apt testing source

/etc/apt/sources.list

1
2
3
4
deb http://http.us.debian.org/debian/ testing non-free contrib main
#deb http://http.us.debian.org/debian/ stable non-free contrib main
#deb http://http.us.debian.org/debian/ unstable non-free contrib main
#deb http://http.us.debian.org/debian/ wheezy non-free contrib main
1
2
#apt edit-sources
apt update

NO_PUBKEY 04EE7237B7D453EC NO_PUBKEY 648ACFD622F3D138

1
2
apt-key adv --keyserver keyserver.ubuntu.com --recv 04EE7237B7D453EC
apt-key adv --keyserver keyserver.ubuntu.com --recv 648ACFD622F3D138

ubuntu repo names

1
2
3
wheezy: debian 7.0
xenial: Ubuntu 16.04
focal: Ubuntu 20.04

refer to:
https://serverfault.com/questions/550855/how-to-add-debian-testing-repository-to-apt-get
https://yunwei365.blog.csdn.net/article/details/114930145

in gdb tui mode scroll the command window

Use cgdb instead.

Let GDBW denote the command window,
let SRCW denote the source window
let TTYW denote the input window.

Cgdb basic usage

1
2
3
4
5
6
ESC key in GDBW: switch to SRCW
i key in SRCW: switch to GDBW
T key in SRCW: switch on/off TTYW
PgUp/PgDn key in GDBW: scroll GDBW
PgUp/PgDn key in SRCW: scroll SRCW
-/= in SRCW: decrease/increase SRCW size

Patch: GDBW output is truncated.
cgdb/scroller.cpp:146
https://github.com/cgdb/cgdb/pull/269

refer to:
https://github.com/cgdb/cgdb/blob/master/doc/cgdb.texi

webrtc备忘录

名词

1
2
3
4
5
6
7
I帧: Intra-coded picture
P帧: Predictive-coded Picture
B帧: Bidirectionally predicted picture
GOP: Group of Pictures
IDR: Instantaneous Decoding Refresh
DTS: Decoding Time Stamp
PTS: Presentation Time Stamp

WebRTC 之视频捕获
https://hyjk2000.github.io/2015/04/21/webrtc-video-capture/
https://github.com/uxctx/DesktopLiveStreaming

so动态库只导出指定函数

retain_sym.txt

1
2
func1
func2

ver_script.txt

1
2
3
4
5
6
7
LIBA_1.1 {
	global:
		foo1;
		foo2;
	local:
		*;
};
1
ld -shared --retain-symbols-file=retain_sym.txt --version-script=ver_script.txt tst.o -o tst.so

refer to:
https://blog.csdn.net/chdhust/article/details/79356717
http://blog.sina.com.cn/s/blog_493667730100csde.html
http://www.gnu.org/software/gnulib/manual/html_node/LD-Version-Scripts.html

linux命令备忘录

名词

1
2
3
4
5
pie: position-independent executable
pic: position-independent code
aslr: address space layout randomization
got: global offset table
vdso: virtual dynamic shared object

Basic command

1
2
3
4
5
6
7
8
9
10
11
12
13
grep [OPTION]... PATTERNS [FILE]...
find [-H] [-L] [-P] [-Olevel] [-D debugopts] [path...] [expression]
find . -size +2G -exec du -sh {} \;
ps axl | grep VirtualBoxVM | grep -v grep | awk '{print $3};'
cat /etc/passwd | sort -k5,5 -t: | column -t -s:
while true; do echo sleep 1 sec; sleep 1; cat /home/work/aa.txt 2>/dev/null && echo ok && break; done
echo first | xargs -i echo {} second
 
cat /etc/shadow
sudo !!
 
cd other_dir
cd - # return back

swap文件

1
2
3
4
dd if=/dev/zero of=./swap_file bs=1G count=8
mkswap ./swap_file
swapon ./swap_file
swapoff ./swap_file

objcopy

1
2
3
objcopy -I binary -O elf32-i386 -B i386 test.jpg test.o
objdump -s -b binary test.o
readelf -s test.o

静态链编stdc++

1
-Bstatic -lstdc++ -Bdynamic

工具

1
2
3
4
systemtap
inotify-tools
windres
reptyr

自启动

1
2
3
4
5
6
7
8
9
10
11
12
#/lib/systemd/system/mytask.service
#ln -s /lib/systemd/system/mytask.service /etc/systemd/system/multi-user.target.wants/mytask.service
[Unit]
Description=mytask
After=network.target
 
[Service]
Type=simple
ExecStart=mytask.sh
 
[Install]
WantedBy=multi-user.target

ubuntu

1
2
3
4
5
6
7
8
#网络配置文件路径,默认DHCP的连接不会生成文件
/etc/NetworkManager/system-connections/
#run arm64 binary on x86
dpkg --add-architecture armhf && apt-get update && apt-get install libc6:armhf
cat /proc/sys/fs/binfmt_misc/
qemu-user -L /home/bamanzi/i386-libs ./prog
#disable background process
systemctl disable unattended-upgrades

centos

1
2
3
4
#网络配置文件路径
/etc/sysconfig/network-scripts/ifcfg-
#compiz
https://spins.fedoraproject.org/mate-compiz/download/index.html

refer to:
http://blog.chinaunix.net/uid-28461677-id-5766451.html
https://blog.csdn.net/weixin_33842304/article/details/91443399
https://unix.stackexchange.com/questions/4034/how-can-i-disown-a-running-process-and-associate-it-to-a-new-screen-shell
https://blog.csdn.net/wuzhong8809/article/details/117450302
https://stackoverflow.com/questions/18312935/find-file-in-linux-then-report-the-size-of-file-searched
https://www.toutiao.com/a7073448755428688399/

Optimizing the kernel for VMware

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
[*] 64-bit kernel (leave blank for x86)
 
General Setup --->
  [*] Optimize very unlikely/likely branches
 
Power management and ACPI options --->
  [*] ACPI (Advanced Configuration and Power Interface) Support --->
 
Processor type and features --->
  Processor Family (usually Core2/Newer Xeon)
 
Bus Options --->
  < > PCCard (PCMCIA/Cardbus) support
 
Networking support --->
  [ ] Amateur Radio support
  [ ] Wireless (only if you plan on using nat EXCLUSIVELY)
 
Device Drivers --->
  Generic Driver Options
    [*] Maintain a devtmpfs filesystem to mount at /dev
 
  Misc Devices --->
    [*] VMware Balloon Driver (manages memory between VM and host)
    [*] VMware VMCI Driver (Virtual Machine Communication Interface - low-latency access to host memory bus)
 
  SCSI device support --->
    [*] SCSI low-level drivers --->
      <*> VMware PVSCSI driver support (high throughput storage adapter)
 
  [*] Fusion MPT device support --->
    <*> Fusion MPT ScsiHost drivers for SPI
 
  [*] Network device support --->
    [*] Ethernet driver support --->
      (disable every driver but this)
      [*] AMD Devices
        <*> AMD PCNet32 PCI support
    [ ] Wireless LAN (ONLY if you disabled Wireless networking support above)
    < > VMware VMXNET3 ethernet driver (PCNet32 is more than enough for most use cases - enable this only if you have spare cpu cycles to burn)
 
  Graphics support --->
    <*> Direct Rendering Manager
    < > Intel 8xx/9xx/G3x/G4x/HD Graphics
    <*> DRM driver for VMware Virtual GPU
      [*] Enable framebuffer console support under vmwgfx by default
    <*> Support for frame buffer devices
 
    Console display driver support --->
      <*> Framebuffer Console support
 
  Sound card support --->
    <*> Advanced Linux Sound Architecture --->
      [*] PCI sound devices
        <*> (Creative) Ensoniq AudioPCI 1371/1373
        < > Intel HD Audio
 
  File systems --->
    (enable only those you anticipate using)
    <*> Second extended fs support
    <*> The Extended 4 (ext4) filesystem
    <*> XFS filesystem support
    <*> Btrfs filesystem Unstable disk format
 
    Pseudo filesystems --->
      [*] Tmpfs virtual memory file system support (former shm fs)
        [*] Tmpfs POSIX Access Control Lists

efi boot (uncertain, maybe need to ask pc maker for signing the kernel.)

1
2
3
4
5
6
Processor type and features --->
  [*] EFI runtime service support 
  [*]   EFI stub support
Firmware Drivers  --->
   EFI (Extensible Firmware Interface) Support  --->
       <*> EFI Variable Support via sysfs

device mapper

1
2
3
Device Drivers
	Multiple devices driver support (RAID and LVM)
		<M>   Device mapper support

refer to:
https://forums.gentoo.org/viewtopic-p-7332884.html
https://stackoverflow.com/questions/40344484/cant-load-self-compiled-linux-kernel

kprobe and uprobe

kprobe

1
2
3
4
5
6
7
8
cd /sys/kernel/debug/tracing
echo 'p:myprobe do_sys_open' > kprobe_events
echo 'r:myretprobe do_sys_open $retval' > kprobe_events
echo 'r:myprobe getname +0($retval):string' > kprobe_events
echo 1 > tracing_on
echo 1 > events/kprobes/myprobe/enable
echo '-:myprobe' > kprobe_events
cat trace

uprobe

1
2
3
4
5
cd /sys/kernel/debug/tracing
echo 'p:do_sth /home/kernel_test/loop_print:0x52d %ip %ax' > uprobe_events
echo 'r:do_sth_exit /home/kernel_test/loop_print:0x52d %ip %ax' >> uprobe_events
echo 1 > events/uprobes/enable
cat trace

refer to:
https://blog.csdn.net/melody157398/article/details/113764679
https://blog.csdn.net/daiq531/article/details/52749673