[20220304]使用gdb完成各種進位制轉換.txt
[20220304]使用gdb完成各種進位制轉換.txt
--//一般使用gdb除錯跟蹤程式,centos 7以上版本gdb支援管道,可以使用gdb p命令實現10,16進位制轉換,透過一些例子說明:
# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
# gdb -v
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<
# echo p/x 250 | gdb -q
(gdb) $1 = 0xfa
(gdb) quit
# echo p/d 0xfa | gdb -q
(gdb) $1 = 250
(gdb) quit
--//缺點就是輸出一些不必要的資訊。也可以使用實現一些位移位或者位與操作。
--//比如bbed下:
BBED> set dba 4,9567
DBA 0x0100255f (16786783 4,9567)
--//如果知道0x0100255f或者16786783 如何轉換成4,9567呢 ,oracle將32位的後22為作為塊號,前面10位作為檔案號。
# echo "p/d 0x0100255f >> 22" | gdb -q
(gdb) $1 = 4
(gdb) quit
# echo "p/d 0x0100255f & 0x3ffff " | gdb -q
(gdb) $1 = 9567
(gdb) quit
--//注意字串裡面出現>>,& , 必須使用引號引起來。
--//當然如果在命令列裡面使用基本沒有問題,另外計算也不成問題,例子:
(gdb) p /x 5+0xA
$12 = 0xf
(gdb) p /d 5+0xA
$13 = 15
(gdb) p /o 5+0xA
$14 = 017
(gdb) p /d 5 * 0xa
$16 = 50
(gdb) p /d 5 * 10
$17 = 50
(gdb) p /d 100 /3
$30 = 33
(gdb) p /x 100 /3
$32 = 0x21
(gdb) p /d 2 << 6
$2 = 128
--//注意這個相當於2^7.
(gdb) p /d 1 << 6
$9 = 64
--//重要的是它可以混合各種進位制在一起計算。
--//新的版本還支援使用2,8進位制。
(gdb) p /d 0b111
$1 = 7
(gdb) p /d 077
$2 = 63
--//注小心前面的0表示8進位制。
(gdb) p /d 0xf0 ^ 0x0f
$12 = 255
--// ^ 表示位異或
(gdb) p /d 0xf0 & 0x0f
$13 = 0
--// & 表示位與
(gdb) p /x 0xf0 | 0x0f
$9 = 0xff
--// | 表示位或
(gdb) help x
Examine memory: x/FMT ADDRESS.
ADDRESS is an expression for the memory address to examine.
FMT is a repeat count followed by a format letter and a size letter.
Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),
t(binary), f(float), a(address), i(instruction), c(char) and s(string).
Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).
The specified number of objects of the specified size are printed
according to the format.
Defaults for format and size letters are those previously used.
Default count is 1. Default address is following last thing printed
with this command or "print".
--//可以執行以上各種格式。
(gdb) p /t 7
$6 = 111
--//t 表示2進位制。
(gdb) p /c 0x41
$7 = 65 'A'
(gdb) p /o 63
$10 = 077
--//順便在oracle 5.9 版本上測試看看。
$ cat /etc/issue.net
Oracle Linux Server release 5.9
$ gdb -v
GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-45.el5)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<
$ echo p/d 0x3820 | gdb -q
(gdb) Hangup detected on fd 0
error detected on stdin
--//可以發現這個版本不支援管道。
$ gdb -q
(gdb) p/x 250
$1 = 0xfa
(gdb) p/d 0xfa
$2 = 250
--//DBA 0x0100255f (16786783 4,9567)
(gdb) p/d 0x0100255f >> 22
$3 = 4
(gdb) p/d 0x0100255f & 0x3ffff
$4 = 9567
(gdb) p /t 0xf
$6 = 1111
(gdb) p /d 12 + 0xa
$7 = 22
(gdb) p /d 011
$9 = 9
(gdb) p /d 0b111
Invalid number "0b111".
--//不支援2進位制轉換。
--//可以透過以上測試發現比bc命令計算器更加靈活。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2864628/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20220314]利用vim下使用gdb進行各種進位制轉換外掛.txt
- C# 2進位制、8進位制、10進位制、16進位制...各種進位制間的輕鬆轉換C#
- Python中各進位制轉換Python
- 2進位制_8進位制_16進位制之間快速轉換的技巧.txt
- JavaScript中的多種進位制與進位制轉換JavaScript
- javascript 各種進位制數字相互轉換程式碼例項JavaScript
- 【進位制轉換】十進位制與十六進位制相互轉換方法
- Qt進位制轉換(十進位制轉十六進位制)QT
- JavaScript 進位制轉換(2進位制、8進位制、10進位制、16進位制之間的轉換)JavaScript
- 使用bc做進位制轉換
- 進位制轉換
- 十六進位制轉換為八進位制
- 十六進位制轉換為十進位制
- 使用Java完成byte陣列與十六進位制字串相互轉換Java陣列字串
- 進位制之間的轉換之“十六進位制 轉 十進位制 轉 二進位制 方案”
- 二進位制轉十進位制快速轉換方法
- lua之m進位制轉換為n進位制-任意進位制轉換演算法演算法
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- JavaScript 進位制轉換JavaScript
- 1.5進位制轉換
- 進位制的轉換
- ORACLE使用函式對二進位制、十進位制、十六進位制數互相轉換Oracle函式
- JavaScript十進位制轉換為二進位制JavaScript
- shell 中轉換16進位制10進位制
- Oracle二進位制與十進位制轉換Oracle
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- Python 進位制互相轉換(二進位制、十進位制和十六進位制)Python
- [20190716]十進位制轉換其他進位制指令碼.txt指令碼
- 【進位制轉換】二進位制、十六進位制、十進位制、八進位制對應關係
- JAVA 二進位制,八進位制,十六進位制,十進位制間進行相互轉換Java
- 計算機基礎進位制轉換(二進位制、八進位制、十進位制、十六進位制)計算機
- 十進位制與二進位制互相轉換指南
- 進位制均值-進位制轉換+最大公約數
- 進位制與二進位制及相關轉換
- 【轉帖】Oracle中的二進位制、八進位制、十進位制、十六進位制相互轉換函式Oracle函式
- (轉)【iOS 開發】二進位制、十進位制、十六進位制相互轉換的方法iOS
- 數的進位制轉換