标签: libc

gets() 函数和输入中的 '\0' 零字节

gets() 如果 C 语言(例如 glibc)的函数从文件中读取零字节 ( ),它会停止吗'\0'

快速测试:echo -ne 'AB\0CDE'

谢谢。

PS这个问题来自这个问题的评论:return to libc - Problem

PPS这个gets功能很危险,但这是一个关于这个功能本身的问题,而不是任何人是否应该使用它的问题。

c glibc gets libc

5
推荐指数
1
解决办法
6456
查看次数

lpcxpresso 与 Cortex-M3:libc.a(lib_a-impure.o) 是什么?为什么它使用 1k 内存?

我希望这不是针对特定领域的。我想知道为什么 libc.a 使用我芯片上 8K 内存中的 1K。

除了调用 array_init 中全局对象的构造函数之外,我不知道使用 libc 的任何方式。据我所知,我认为它也参与了默认的副本构造。我使用池分配,因此没有与堆相关的东西(我确实使用了新的放置,但据我所知,这不应该导致 libc 使用 ram)。如果我完全忽略该库并使用placement new 作为 hack 来构造 main 中的所有全局对象,我的程序运行良好,这是 libc 使用的 1k 内存毫无用处的另一个暗示。谁能指出我进一步阅读或解释如何保留 array_init 和 POD 类型的默认复制构造,但摆脱 RAM 开销?

这是我的项目的 .map 文件中的违规条目:

 *(vtable)
 *(.data*)
 .data._ZN3CDC4CoreI5MyCDCE11depInEmpty_E
                0x10000000        0x1 ./src/Main.o
                0x10000000                CDC::Core<MyCDC>::depInEmpty_
 *fill*         0x10000001        0x3 00
 .data.SystemFrequency
                0x10000004        0x4 ./kvasir/system_LPC17xx.o
                0x10000004                SystemFrequency
 .data.impure_data
                0x10000008      0x428 c:/nxp/lpcxpresso_5.2.4_2122/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/lib/armv7-m\libc.a(lib_a-impure.o)
 .data          0x10000430        0x4 c:/nxp/lpcxpresso_5.2.4_2122/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/armv7-m\crtbegin.o
                0x10000430                __dso_handle
                0x10000434                . = ALIGN (0x4)
                0x10000434                _edata = .

.jcr            0x10000434        0x0 load address 0x00003ee8
 .jcr           0x10000434        0x0 c:/nxp/lpcxpresso_5.2.4_2122/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/armv7-m\crtbegin.o …
Run Code Online (Sandbox Code Playgroud)

c++ libc cortex-m

5
推荐指数
1
解决办法
2890
查看次数

为什么 __libc_start_main 的第三个参数的名称是 ubp_av 而不是 argv?

在以下原型中:

int __libc_start_main( int (*main) (int, char * *, char * *),
    int argc, 
    char **ubp_av, 
    void (*init) (void),
    void (*fini) (void),
    void (*rtld_fini) (void),
    void (* stack_end) );
Run Code Online (Sandbox Code Playgroud)

为什么ubp_av出现而不出现argv
是什么ubp_av意思?

c libc

5
推荐指数
1
解决办法
2914
查看次数

如何为嵌入式设备获取正确的 MIPS libc 工具链

我(反复)遇到了各种公司的嵌入式 Linux 产品的问题,其中的 GPL 源代码与系统上实际运行的代码不匹配。它“接近”,但不太正确,特别是相对于他们使用的标准 C 库而言。这不是违反GPL吗?

通常,这种不匹配会导致程序员(像我一样)进行交叉编译,但在程序运行时设备却神秘地回复“找不到文件”或类似的信息。

我并不是唯一一个遇到此类问题的人 - 对于许多人来说,都有与该问题直接或间接相关的线程:例如: 基于 MIPS 的代码源工具链的编译参数?

我在 Sony 设备、D-link 和许多其他设备上都遇到过这个问题。这很常见。

制作新库并不是一个好的解决方案,因为大多数系统只是 ROMFS,并且 LD_LIBRARY_PATH 有时会损坏 - 因此在设备上安装新库会浪费非常有限的内存,并且通常无法工作。

如果我知道该库的正确源代码版本是什么,我就可以绕过制造商的粗心大意,并从原始开发人员树中编译它;但是,当我拥有的只是库本身的二进制文件时,如何找到我需要的版本?

例如:我在 DSL 调制解调器的 libc 上运行 elfread -a libc.so.0 (见下文);但我在这里没有看到任何可以告诉我它到底是哪个 libc 的内容......

如何从库的二进制文件中找到源代码的名称或标识符,以便我可以使用该库创建交叉编译器?例如:谁能告诉我这个库的源代码来自什么,以及他们是如何知道的?

ELF Header:
  Magic:   7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, big endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              DYN (Shared object file)
  Machine: …
Run Code Online (Sandbox Code Playgroud)

linux embedded gcc libc cross-compiling

5
推荐指数
0
解决办法
2630
查看次数

u-boot /lib/ld-linux-armhf.so.3: 没有那个文件或目录

我的机器 Ubuntu 16.04.3 LTS x86_64。我确实编译了 u-boot-2017.11,但出现错误。

u-boot-2017.11$ export ARCH=arm

u-boot-2017.11$ export CROSS_COMPILE=/opt/toolchains/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

u-boot-2017.11$ make geekbox_defconfig
  HOSTCC  scripts/basic/fixdep
/lib/ld-linux-armhf.so.3: No such file or directory
scripts/Makefile.host:99: recipe for target 'scripts/basic/fixdep' failed
make[1]: *** [scripts/basic/fixdep] Error 255
Makefile:399: recipe for target 'scripts_basic' failed
make: *** [scripts_basic] Error 2
Run Code Online (Sandbox Code Playgroud)

我尝试查找并安装丢失的软件包,但已全部安装完毕。

u-boot-2017.11$ dpkg -S ld-linux-armhf.so
libc6-armhf-cross: /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3

u-boot-2017.11$ sudo apt-get install libc6-armhf-cross
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libc6-armhf-cross is already the newest version (2.23-0ubuntu3cross1).
0 upgraded, 0 newly installed, …
Run Code Online (Sandbox Code Playgroud)

ubuntu libc u-boot ubuntu-16.04

5
推荐指数
1
解决办法
1万
查看次数

重回 libc 攻击

我正在尝试使用格式字符串攻击向量对以下代码实施返回到 libc 攻击。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
   char a[10];
   scanf("%s",&a);  
   printf(a);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想通了使用系统()的地址p system的命令gdb。通过使用 对堆栈帧的检查x/500s $esp,我计算出包含\bin\sh.

system: 0xf7e2cda0 
exit: 0xf7e209d0
\bin\bash: 0xffffd207
Run Code Online (Sandbox Code Playgroud)

有了这些东西,我构造了以下格式字符串:

python -c 'print "A"*14 + "\xbc\xcd\xff\xff" + "\xa0\xcd\xe2\xf7" + "\xd0\x09\xe2\xf7" + "\x07\xd2\xff\xff"' > inp
Run Code Online (Sandbox Code Playgroud)

其中0xffffcdbc - 0x4是包含系统地址0xf7e2cda0值的本地地址。

我使用编译程序gcc -m32 -fno-stack-protector -o sh sh.c并使用gdb sh. 执行后,在输入时r<inp,我得到以下输出

gdb_output

如上所示,显示了一些错误命令,我只有在r再次运行命令后才能进入 shell …

c linux libc buffer-overflow

5
推荐指数
1
解决办法
5799
查看次数

ubuntu 中的 libc 还是 glibc?

我对这些库有点困惑。我现在在 Ubuntu 上工作,我使用 g++ 5,我看到我的应用程序链接在 libc.so 中。它是 Ubuntu 对 C 标准库的实现吗?它与 glibc 不同吗?

$ ldd application.exe
...
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
...
Run Code Online (Sandbox Code Playgroud)

ubuntu gcc glibc libc

5
推荐指数
2
解决办法
9043
查看次数

你如何写信给 Pty 大师 Rust

我创建了一个简单的 pty 设置,但是我不确定如何在创建后实际写入主端或从端。我也不确定我的设置是否正确,因为经过检查,pty 的子进程的 Stdin、Stdout 和 Stderr 都是 None 而不是设置为从文件描述符。任何人都可以澄清这是否正确,如果不正确,您对如何解决它有任何建议吗?

use libc::{self};
use nix::pty::openpty;
use std::os::unix::io::FromRawFd;
use std::process::{Child, Command, Stdio};

#[derive(Debug)]
pub struct Pty {
    process: Child,
    fd: i32,
}

fn create_pty(process: &str) -> Pty {
    let ends = openpty(None, None).expect("openpty failed");
    let master = ends.master;
    let slave = ends.slave;

    let mut builder = Command::new(process);
    builder.stdin(unsafe { Stdio::from_raw_fd(slave) });
    builder.stdout(unsafe { Stdio::from_raw_fd(slave) });
    builder.stderr(unsafe { Stdio::from_raw_fd(slave) });

    match builder.spawn() {
        Ok(process) => {
            let pty = Pty {
                process,
                fd: …
Run Code Online (Sandbox Code Playgroud)

unix libc tty pty rust

5
推荐指数
1
解决办法
479
查看次数

未找到版本“GLIBC_2.28”

我正在尝试在 ARMv7(32 位)架构上安装 PyTorch,但 PyTorch 没有官方的 ARMv7 版本,所以我尝试了这个非官方版本

它安装成功但是当我导入手电筒时出现以下错误

>>import torch
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.7/site-packages/torch/__init__.py", line 81, in <module>
    from torch._C import *
ImportError: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.28' not found (required by /usr/local/lib/python3.7/site-packages/torch/lib/libtorch_python.so)
Run Code Online (Sandbox Code Playgroud)

我尝试了以下

sudo apt-get update
sudo apt-get install libc6
Run Code Online (Sandbox Code Playgroud)

但它接缝就像我有最新版本的 libc6

Reading package lists... Done
Building dependency tree       
Reading state information... Done
libc6 is already the newest version (2.23-0ubuntu11).
The following packages were automatically installed and are no …
Run Code Online (Sandbox Code Playgroud)

glibc libc armv7 ubuntu-16.04 pytorch

5
推荐指数
2
解决办法
4万
查看次数

没有线程本地存储的 errno

我想用tcc静态编译一个程序。tcc 抱怨error: Unknown relocation type: 23. 这显然是由于我的 libc 实现(glibc 2.28-10)使用线程本地存储来实现errnotcc 不支持。我要编译的程序不使用线程,因此如果errno作为全局实现不会有问题,这将为 tcc 修复它。有谁知道是否有可以配置为执行此操作的 libc 实现?

c glibc libc musl

5
推荐指数
0
解决办法
55
查看次数

标签 统计

libc ×10

c ×4

glibc ×4

gcc ×2

linux ×2

ubuntu ×2

ubuntu-16.04 ×2

armv7 ×1

buffer-overflow ×1

c++ ×1

cortex-m ×1

cross-compiling ×1

embedded ×1

gets ×1

musl ×1

pty ×1

pytorch ×1

rust ×1

tty ×1

u-boot ×1

unix ×1