Unix & Linux Stack Exchange
Q&A for users of Linux, FreeBSD and other Unix-like operating systems
Latest Questions
1
votes
1
answers
93
views
Adb is giving an undefined symbol: libusb_get_ssplus_usb_device_capability_descriptor error, and I am unsure how to solve this?
I am trying to run `adb`, in order to backup my android device. I installed android tools via dnf (`sudo dnf install android-tools`), but adb is giving a symbol error, specifically: `adb: symbol lookup error: adb: undefined symbol: libusb_get_ssplus_usb_device_capability_descriptor`. I have tried to...
I am trying to run
adb
, in order to backup my android device. I installed android tools via dnf (sudo dnf install android-tools
), but adb is giving a symbol error, specifically:
adb: symbol lookup error: adb: undefined symbol: libusb_get_ssplus_usb_device_capability_descriptor
.
I have tried to look online if others have experienced this as well, but was unable to find anything.
From what I've been able to gather, this symbol should be present in all libusb version greater then 1.0.26, but mine is greater but still gives the error.
$ rpm -q libusb1
> libusb1-1.0.27-9.fc41.x86_64
> libusb1-1.0.27-9.fc41.i686
> libusb1-1.0.28-2.fc41.x86_64
> libusb1-1.0.28-2.fc41.i686
I also checked that adb indeed does link to my system libraries, which it does.
$ ldd $(which adb)
> ...
> libusb-1.0.so.0 => /lib64/libusb-1.0.so.0 (0x00007f07c835f000)
> ...
I'm not fully sure what to try next, or how to get adb to run succesfully.
Any call to adb
gives this lookup error (even simply calling it as adb --help
).
I am running:
- Fedora 41 (KDE Plasma)
- Kernel 6.14.11
- with an Intel i7 mobile cpu, in case that might matter.
Brendan Mesters
(111 rep)
Jun 21, 2025, 11:45 AM
• Last activity: Jul 2, 2025, 06:44 PM
0
votes
1
answers
243
views
Add symbols of LKM to kernel
I am trying to get my Android kernel working but I have a kernel module that is needed in order to get access to the file system of the device. Unfortunately there is no source code available so there are only the pre-compiled module and the kernel source. The kernel now tries to load the module wit...
I am trying to get my Android kernel working but I have a kernel module that is needed in order to get access to the file system of the device. Unfortunately there is no source code available so there are only the pre-compiled module and the kernel source. The kernel now tries to load the module without success. In the
Module.symvers
file in the kernel root directory the symbol that is needed is missing but the manufacturer of the device delivered a Module.symvers
file from the root of the kernel source tree which includes all symbols that are needed.
How can I include those symbols in my kernel to get the module working?
lehmanju
(1 rep)
Mar 20, 2016, 02:07 PM
• Last activity: Nov 4, 2024, 03:40 PM
0
votes
0
answers
336
views
How to detect undefined symbols in shared libraries or objects?
My Linux distribution (openSUSE Slowroll) accidentally shipped some incompatible libraries recently due to its experimental nature, lacking adequate automated testing using openQA, that caused the desktop environment and other programs like flatpak to crash on startup. The relevant errors: ``` Oct 1...
My Linux distribution (openSUSE Slowroll) accidentally shipped some incompatible libraries recently due to its experimental nature, lacking adequate automated testing using openQA, that caused the desktop environment and other programs like flatpak to crash on startup.
The relevant errors:
Oct 10 09:05:09 suse-pc gnome-shell: JS ERROR: GLib.Error g-invoke-error-quark: Could not locate g_settings_bind_with_mapping_closures: 'g_settings_bind_with_mapping_closures': /lib64/libgio-2.0.so.0: undefined symbol: g_settings_bind_with_mapping_closures
Oct 14 03:07:36 suse-pc atomic-update: flatpak: symbol lookup error: /lib64/libgobject-2.0.so.0: undefined symbol: g_sort_array
I have a simple program I use to perform atomic updates, so I was wondering if there was a way to detect these undefined symbols in shared libraries/objects, so the faulty update can be discarded instead of being applied.
Thanks!
---
EDIT 1:
I found an easy way to detect incompatible libraries was to print the version string for the program being tested:
pavin@suse-laptop:~/Downloads> gnome-control-center --version
gnome-control-center: symbol lookup error: /lib64/libgoa-backend-1.0.so.2: undefined symbol: adw_button_row_get_type, version LIBADWAITA_1_0
As @MarcusMüller said in the comments, this may not work always. So it is necessary to perform the check for a list of all essential programs you need.
Pavin Joseph
(276 rep)
Oct 28, 2024, 08:57 AM
• Last activity: Oct 28, 2024, 04:01 PM
3
votes
1
answers
4424
views
How to list imported functions (.plt) for an ELF executable without disassembling using objdump?
Currently, I check for imported functions (`.plt`) using `objdump`: objdump -D -j .plt myprog | grep '@plt' However, it doesn't seem right to have `objdump` output annotated disassembly to `grep` to list imported (`.plt`) functions. To check exported functions, I use `readelf -s myprog`, but the imp...
Currently, I check for imported functions (
.plt
) using objdump
:
objdump -D -j .plt myprog | grep '@plt'
However, it doesn't seem right to have objdump
output annotated disassembly to grep
to list imported (.plt
) functions.
To check exported functions, I use readelf -s myprog
, but the imported .plt
functions doesn't show up here?
How can I list all imported (.plt
) function in an ELF executable?
Shuzheng
(4931 rep)
Jun 23, 2019, 08:38 AM
• Last activity: Mar 22, 2024, 07:05 PM
2
votes
0
answers
2389
views
Symbol lookup error for libreadline
I recently started having problems with running programs like sqlite3 or awk on Ubuntu20. These programs won't start and just show this error: ```symbol lookup error: /usr/local/lib/libreadline.so.8: undefined symbol: UP``` I found several solutions but those usually lead to installing libreadline f...
I recently started having problems with running programs like sqlite3 or awk on Ubuntu20.
These programs won't start and just show this error:
lookup error: /usr/local/lib/libreadline.so.8: undefined symbol: UP
I found several solutions but those usually lead to installing libreadline from source. I removed libreadline and libhistory and their symlinks from /usr/local and followed a guide that is not available online now.
I installed it, made all symlinks, updated ENV variables but the problem still persists.
These solutions (https://stackoverflow.com/questions/26670417/how-to-compile-readline-from-source and https://stackoverflow.com/questions/46881581/libreadline-so-7-undefined-symbol-up ) suggest that invalid symbol may be defined here /usr/lib/libncurses.so but tsuch file is not in my system.
Please let me know if you have any suggestions what I can do to fix this problem.
Juraj Bezručka
(121 rep)
Apr 7, 2021, 09:49 PM
• Last activity: Dec 22, 2023, 07:58 AM
1
votes
0
answers
2682
views
Access list of all symbols exported `/proc/kallsyms` from inside kernel module?
I'm writing a simple kernel module and it seems on the newest kernel versions (I've tried `5.8`, `5.10`, `6.0`) functions like `kallsyms_lookup_name` and `kallsyms_on_each_symbol` are no longer exported, meaning they can't be accessed through `kallsyms.h`. So, how do I access the list containing all...
I'm writing a simple kernel module and it seems on the newest kernel versions (I've tried
5.8
, 5.10
, 6.0
) functions like kallsyms_lookup_name
and kallsyms_on_each_symbol
are no longer exported, meaning they can't be accessed through kallsyms.h
. So, how do I access the list containing all the kernel symbols and their addresses from the kernel module? What's the best approach?
I'm able to find them with a shell command sudo cat /proc/kallsyms/
but now I wanna be able to do that from the k.o. Any suggestions?
Allan Almeida
(13 rep)
Nov 1, 2022, 02:05 PM
3
votes
1
answers
3459
views
ELF symbol: GLOBAL+HIDDEN
Based on eg. [this Oracle description][1]: > STB_GLOBAL > Global symbols. **These symbols are visible to all object files** being combined. One file's definition of a global symbol will satisfy another file's undefined reference to the same global symbol. > ... > STV_HIDDEN > A symbol defined in the...
Based on eg. this Oracle description :
> STB_GLOBAL
> Global symbols. **These symbols are visible to all object files** being combined. One file's definition of a global symbol will satisfy another file's undefined reference to the same global symbol.
> ...
> STV_HIDDEN
> A symbol defined in the current component is hidden if its name **is not visible to other components**. Such a symbol is necessarily protected. This attribute is used to control the external interface of a component. An object named by such a symbol may still be referenced from another component if its address is passed outside.
> **A hidden symbol contained in a relocatable object is either removed or converted to STB_LOCAL binding** by the link-editor when the relocatable object is included in an executable file or shared object.
However, looking at
readelf -s
of some simple test program (compiled with GCC on x86-64 Linux), there are some global hidden symbols:
FUNC GLOBAL HIDDEN 16 _fini
OBJECT GLOBAL HIDDEN 25 __dso_handle
OBJECT GLOBAL HIDDEN 25 __TMC_END__
According to the description above this should be both nonsensical and not allowed at all.
What are the properties (visibility, interpositioning ability, ...) of this combination?
Moutaineer of Mariana trench
(81 rep)
May 5, 2022, 07:14 PM
• Last activity: Aug 2, 2022, 08:11 PM
0
votes
1
answers
341
views
the value of system calls are 0 in symbol table
i use the following command to see the symbol table of my binary: readelf -s mybinary you can see part of the output below: [![enter image description here][1]][1] [1]: https://i.sstatic.net/Dmiee.png as you can see the value of all system calls such as printf and exit are 00000000. but i want to fi...
i use the following command to see the symbol table of my binary:
readelf -s mybinary
you can see part of the output below:
as you can see the value of all system calls such as printf and exit are 00000000. but i want to find the address of this system calls. what should i do? i search a lot but i don't find any thing.

sarahh
(1 rep)
Dec 27, 2020, 01:49 PM
• Last activity: Dec 27, 2020, 02:37 PM
1
votes
1
answers
989
views
No version symbols in freshly compiled libstdc++
I'm compiling version 10.1 of GCC using the following configuration: ../configure --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --prefix=/home/user/toolchain/gcc --enable-checking=release --enable-languages=c,c++,fortran --disable-multilib --enable-shared --enable-gnu-un...
I'm compiling version 10.1 of GCC using the following configuration:
../configure --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --prefix=/home/user/toolchain/gcc --enable-checking=release --enable-languages=c,c++,fortran --disable-multilib --enable-shared --enable-gnu-unique-object --with-linker-hash-style=gnu
After compilation is finished it seems i don't have any version symbols in the compiled listdc++.so:
> strings ./x86_64-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.28 | grep GLIBCXX
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
(and nothing else)
(btw I get the same result if I 'make install' gcc before checking on the installed lib)
Going to another system, the same command issues (output truncated):
> strings /usr/lib64/libstdc++.so.6.0.28 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.5
[ ... ]
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
[ ... ]
Why am I not getting the version symbols in my freshly new compiled gcc/libstdc++ version ?
JeanMi
(131 rep)
Jul 2, 2020, 09:49 AM
• Last activity: Jul 2, 2020, 04:51 PM
2
votes
2
answers
4229
views
Extracting the size and origin of all symbols in an ELF
I am trying to estimate the code size of a binary's various components. I have access to the source code and resulting build directory containing all built object files. Of course, I want to include only the symbols that are actually used, so adding the sizes of the all the object file's `.text` and...
I am trying to estimate the code size of a binary's various components. I have access to the source code and resulting build directory containing all built object files. Of course, I want to include only the symbols that are actually used, so adding the sizes of the all the object file's
.text
and .data
sections will end up overestimating actuals.
How can one determine the size and origin of all symbols used to link an ELF file? Something like this would be useful:
Symbol Size Origin
func1 0x50 ../src/func1.o
func2 0x75 ../src/func2.o
...
And something similar for all symbols that are .data
. The resulting .map
file seems to have *some* of this data, but it seems incomplete. Two sections that stand out are:
Allocating common symbols
Common symbol size file
s_Handle 0x8 ../BUILD/src/handle.o
_main_obj 0x48 ../BUILD/src/boot.o
....
But there are just a few dozen symbols listed here. The following section seems to have far more symbols, but it appears as if they are listed as being "Discarded" at link-time:
Discarded input sections
.text 0x00000000 0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/crti.o
.data 0x00000000 0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/crti.o
.bss 0x00000000 0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/crti.o
.data 0x00000000 0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/crt0.o
.bss 0x00000000 0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/crt0.o
.ARM.extab 0x00000000 0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/crt0.o
.text._Z12notify_startv
0x00000000 0x14 ../BUILD/./test_env.o
.text._Z30notify_performance_coefficientPKci
0x00000000 0x18 ../BUILD/./test_env.o
.text._Z30notify_performance_coefficientPKcj
0x00000000 0x18 ../BUILD/./test_env.o
.text._Z30notify_performance_coefficientPKcd
0x00000000 0x20 ../BUILD/./test_env.o
.text._Z17notify_completionb
0x00000000 0x64 ../BUILD/./test_env.o
.text._Z21notify_completion_strbPc
0x00000000 0x30 ../BUILD/./test_env.o
...
sherrellbc
(2601 rep)
Sep 21, 2017, 04:31 PM
• Last activity: May 17, 2019, 05:16 PM
1
votes
2
answers
7619
views
Need to type special symbol in vi
I want to type `½` in vi mode but it is coming with extra character `½`. I am pressing `ALT+0189`. I have searched a lot on the same but failed to get.
I want to type
½
in vi mode but it is coming with extra character ½
. I am pressing ALT+0189
. I have searched a lot on the same but failed to get.
api1411
(144 rep)
Oct 18, 2016, 12:50 PM
• Last activity: Mar 9, 2019, 08:37 AM
2
votes
2
answers
2066
views
Why do some libc symbols have WEAK binding and others GLOBAL?
Why are different symbols in libc declared with different bindings, 1510 0x0003d200 0xf7d55200 WEAK FUNC 55 system 454 0x00067b40 0xf7d7fb40 WEAK FUNC 474 puts 147 0x000303d0 0xf7d483d0 GLOBAL FUNC 33 exit From `readelf -s /lib/i386-linux-gnu/libc-2.27.so`, 1510: 0003d200 55 FUNC WEAK DEFAULT 13 sys...
Why are different symbols in libc declared with different bindings,
1510 0x0003d200 0xf7d55200 WEAK FUNC 55 system
454 0x00067b40 0xf7d7fb40 WEAK FUNC 474 puts
147 0x000303d0 0xf7d483d0 GLOBAL FUNC 33 exit
From
readelf -s /lib/i386-linux-gnu/libc-2.27.so
,
1510: 0003d200 55 FUNC WEAK DEFAULT 13 system@@GLIBC_2.0
454: 00067b40 474 FUNC WEAK DEFAULT 13 puts@@GLIBC_2.0
147: 000303d0 33 FUNC GLOBAL DEFAULT 13 exit@@GLIBC_2.0
[From this question](https://reverseengineering.stackexchange.com/q/19764/22669) , it seems like the authors' libc has a LOCAL
exit?
What the rhyme or reason behind the different libc binding levels?
Evan Carroll
(34663 rep)
Oct 31, 2018, 02:46 AM
• Last activity: Oct 31, 2018, 09:21 PM
46
votes
3
answers
27781
views
Why nm shows no symbols for /lib/i386-linux-gnu/libc.so.6?
I expected to see number of symbols in the **libc.so.6** file including **printf**. I used the **nm** tool to find them, however it says there is no symbol in libc.so.6.
I expected to see number of symbols in the **libc.so.6** file including **printf**. I used the **nm** tool to find them, however it says there is no symbol in libc.so.6.
masec
(645 rep)
May 11, 2016, 08:48 PM
• Last activity: Oct 23, 2018, 01:45 AM
8
votes
1
answers
6041
views
What are difference between the ELF symbol visibility levels?
The [NASM docs on *"`elf` Extensions to the GLOBAL Directive"* say,](https://www.nasm.us/doc/nasmdoc7.html) > Optionally, you can control the ELF visibility of the symbol. Just add one of the visibility keywords: `default`, `internal`, `hidden`, or `protected`. The default is `default` of course. Wh...
The [NASM docs on *"
elf
Extensions to the GLOBAL Directive"* say,](https://www.nasm.us/doc/nasmdoc7.html)
> Optionally, you can control the ELF visibility of the symbol. Just add one of the visibility keywords: default
, internal
, hidden
, or protected
. The default is default
of course.
Where are these defined? and how does ld
use them? I see [access levels mentioned frequently in C++ which include *protected*, *public*, and *private*](https://en.cppreference.com/w/cpp/language/access) , but I don't know if this is what ELF is referencing?
My use-case is C and Assembly so if you can make this relevant to those two languages and the linker, extra points.
Evan Carroll
(34663 rep)
Oct 1, 2018, 11:47 PM
• Last activity: Oct 2, 2018, 02:41 PM
3
votes
1
answers
2165
views
What is the number in readelf symbol table name?
I have a local static variable, something like this: void function(void) { static unsigned char myVariable = 0; ... I dump the symbol table using readelf as follows: readelf -s myprogram.elf and I get the symbol table, that contains `myVariable` as follows: ... 409: 00412668 1 NOTYPE LOCAL DEFAULT 1...
I have a local static variable, something like this:
void function(void) {
static unsigned char myVariable = 0;
...
I dump the symbol table using readelf as follows:
readelf -s myprogram.elf
and I get the symbol table, that contains
myVariable
as follows:
...
409: 00412668 1 NOTYPE LOCAL DEFAULT 16 myVariable.9751
...
My question is: what does the number mean after the name of the variable and the dot? And is there any detailed documentation about the output format of readelf? The man page does not contain information about the format of the symbol table, and I cannot find anything about this.
(I'm using Xilinx's ARM GNU tools, but I guess, this is kind of the same for other platforms as well)
Thanks!
waszil
(133 rep)
Sep 27, 2018, 10:12 AM
• Last activity: Sep 27, 2018, 05:16 PM
8
votes
1
answers
4208
views
How to handle accents with enscript?
I cannot figure out how to handle accents with `enscript` when converting a txt into a pdf: echo "élisée" | enscript -o - -X | ps2pdf - output.pdf I tried all possible encoding but none are leading to the proper result. I guess I should add a iconv at the first stdout --------------------...
I cannot figure out how to handle accents with
enscript
when converting a txt into a pdf:
echo "élisée" | enscript -o - -X | ps2pdf - output.pdf
I tried all possible encoding but none are leading to the proper result.
I guess I should add a iconv at the first stdout
--------------------
List of enscript encoding that I have tried:
* 88592
* 88593
* 88594
* 88595
* 88597
* 88599
* 885910
* ascii
* asciifise
* asciidkno
* ibmpc
* mac
* vms
* hp8
* koi8
* ps
* pslatin1
user123456
(5258 rep)
Dec 12, 2016, 07:37 PM
• Last activity: Dec 12, 2016, 08:16 PM
2
votes
1
answers
5881
views
Linux kernel, missing '__fentry__' symbol
Trying to build the [EtherCAT master][1] driver (realtime I/O driver) on a RT Linux (SL6.3) I keep bumping into a missing symbol issue when building the EtherCAT kernel modules: # make modules make -C "/usr/src/kernels/3.8.13-rt27.40.el6rt.x86_64" M="/root/etherlabmaster-code-08aa7305b9baba37bdd9eb4...
Trying to build the EtherCAT master driver (realtime I/O driver) on a RT Linux (SL6.3) I keep bumping into a missing symbol issue when building the EtherCAT kernel modules:
# make modules
make -C "/usr/src/kernels/3.8.13-rt27.40.el6rt.x86_64" M="/root/etherlabmaster-code-08aa7305b9baba37bdd9eb4d8c2a8762aa56a7e2" modules
make[1] : Entering directory `/usr/src/kernels/3.8.13-rt27.40.el6rt.x86_64'
Building modules, stage 2.
MODPOST 4 modules
WARNING: "__fentry__" [/root/etherlabmaster-code-08aa7305b9baba37bdd9eb4d8c2a8762aa56a7e2/master/ec_master.ko] undefined!
WARNING: "__fentry__" [/root/etherlabmaster-code-08aa7305b9baba37bdd9eb4d8c2a8762aa56a7e2/examples/mini/ec_mini.ko] undefined!
WARNING: "__fentry__" [/root/etherlabmaster-code-08aa7305b9baba37bdd9eb4d8c2a8762aa56a7e2/devices/ec_generic.ko] undefined!
WARNING: "__fentry__" [/root/etherlabmaster-code-08aa7305b9baba37bdd9eb4d8c2a8762aa56a7e2/devices/e1000e/ec_e1000e.ko] undefined!
make[1] : Leaving directory `/usr/src/kernels/3.8.13-rt27.40.el6rt.x86_64'
# grep -Hin "fentry" /boot/config-
uname -r
/boot/config-3.8.13-rt27.40.el6rt.x86_64:4797:CONFIG_HAVE_FENTRY=y
# strings /boot/System.map-3.8.13-rt27.40.el6rt.x86_64 | grep -i "fentry"
-- nothing --
#
I'm using **GCC v 4.9.1**, as you can see, the kernel config file does contain an entry related to 'fentry' and is enabled.
Weird thing is that I would expect the System.map
to contain the __fentry__
symbol declared in there, but it isn't!?
I've tried building the EtherCAT driver against the kernel 3.10-rt & 3.14-rt, same issue, it's complaining about about the __fentry__
symbol missing.
If I go ahead and launch the EtherCAT service, I get the following:
# service ethercat start
Starting EtherCAT master 1.5.2 FATAL: Error inserting ec_master (/lib/modules/3.8.13-rt27.40.el6rt.x86_64/ethercat/master/ec_master.ko): Unknown symbol in module, or unknown parameter (see dmesg)
failed
# dmesg | tail
...
ec_master: Unknown symbol __fentry__ (err 0)
fduff
(5185 rep)
Feb 3, 2016, 01:12 PM
• Last activity: Feb 15, 2016, 04:50 PM
3
votes
1
answers
678
views
Can the kernel symbols' addresses be influenced? consequences?
**tl;dr:** in my distros linux 3.08 kernel using `cat /proc/kallsyms` I can find out that for instance the _commit_creds function/symbol is located at address 0xc1073fe0. When either: - building my kernel (option 1) - via tweaking the kernel binary (option 2) is it **possible** to influence those ad...
**tl;dr:** in my distros linux 3.08 kernel using
cat /proc/kallsyms
I can find out that for instance the _commit_creds function/symbol is located at address 0xc1073fe0. When either:
- building my kernel (option 1)
- via tweaking the kernel binary (option 2)
is it **possible** to influence those addresses? (i.e. randomize to mitigate exploits to the kernel?)
Am I further correctly assuming that the system calls provided by the kernel need to remain at predictable/know addresses to not break the ABI provided by the kernel?
**long version**
In part of the cve-2016-0728 Vulnerability of certain linux kernels the provided PoC uses those two source code lines:
#define COMMIT_CREDS_ADDR (0xffffffff81094250)
#define PREPARE_KERNEL_CREDS_ADDR (0xffffffff81094550)
which even though they play their role *only after an overflow-with-use-after-free type of problem has occured*, are nonetheless essential to complete the priveledge escalation. Of course the addresses are not the same for all kernels and basically change for each distribution. Anyway it seems that they are constant within the line of kernels (i.e. Ubuntu 12.04 x86 will always have the address at 0xc1073fe0).
My question is to understand if one can influence those addresses to shuffle/randomize them as to make an exploitation of the kernel more difficult (i.e. somewhat blind the attacker, after having the instruction pointer in kernel ring 0)?
I would assume that in order to have a ABI for system calls I cannot change the position of sys_xxxxxxxxxxx symbols, but at least for the internals of kernel symbols I do not necessarily understand the need to have them be predictable?
Therefore I am asking here how one would go about randomizing those kernel symbols, either by
- (1) compile custom kernel or,
- (2) even better tweak a kernel and move the symbols around (which I think might be much harder and more fragile thing to do).
What is the consequence when changing the addresses of kernel symbols? (excluding the system call ABI ones).
humanityANDpeace
(15072 rep)
Jan 20, 2016, 09:43 AM
• Last activity: Jan 20, 2016, 02:58 PM
10
votes
1
answers
2782
views
Function symbol gets '.part' suffix after compilation
When cross compiling the Linux kernel 3.18.10, the compiler adds a `.part. ` suffix at the end of some symbols (see an example below). The number ` ` changes when using different defconfigs. Does anybody know under which conditions the compiler adds the part suffix at the end of a symbol? ``$ arm-no...
When cross compiling the Linux kernel 3.18.10, the compiler adds a
.part.
suffix at the end of some symbols (see an example below). The number `` changes when using different defconfigs. Does anybody know under which conditions the compiler adds the part suffix at the end of a symbol?
`$ arm-none-linux-gnueabi-readelf -a vmlinux | grep do_kernel_fault
`
gives
`c03a48f8 116 FUNC LOCAL DEFAULT 2 __do_kernel_fault.part.10
`
mblaettler
(103 rep)
Aug 13, 2015, 02:06 PM
• Last activity: Dec 4, 2015, 02:47 PM
Showing page 1 of 19 total questions