标签: glibc

***glibc检测到***sendip:free():无效下一个大小(正常):0x09da25e8***

可能重复:
C++错误:free():下一个大小无效(快):

这是一个C++问题(虽然是'C++被滥用'的问题).备选副本:面临错误:glibc检测到免费无效下一个大小(快)


我正在使用Linux工具生成一些n/w流量,但是当我尝试发送大于某个长度的数据时,当工具为其提供时,会出现此错误.

我的整个项目都介于两者之间.由于我没有创建该工具,因此不确定错误发生在哪里......并且此错误(偶数gdb)没有给出关于问题所在位置的任何提示.如何检测错误点?

如果有问题,我会给出一些问题的快照.请指导我该怎么办?它对我来说看起来像一个网格.

udit@udit-Dabba ~ $ sendip -v -p ipv6 -f file.txt -6s ::1 -p esp -es 0x20 -eq 0x40 -ei   
abcd -eI zxc -p tcp -ts 21 -td 21 ::2 | more
*** glibc detected *** sendip: free(): invalid next size (normal): 0x09da25e8 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x6b961)[0x17b961]
/lib/i386-linux-gnu/libc.so.6(+0x6d28b)[0x17d28b]
/lib/i386-linux-gnu/libc.so.6(cfree+0x6d)[0x18041d]
/lib/i386-linux-gnu/libc.so.6(fclose+0x14a)[0x16b9ca]
/lib/i386-linux-gnu/libc.so.6(+0xe053f)[0x1f053f]
/lib/i386-linux-gnu/libc.so.6(__res_ninit+0x25)[0x1f0815]
/lib/i386-linux-gnu/libc.so.6(__res_maybe_init+0x130)[0x1f1810]
/lib/i386-linux-gnu/libc.so.6(__nss_hostname_digits_dots+0x34)[0x1f37d4]
/lib/i386-linux-gnu/libc.so.6(gethostbyname2+0x96)[0x1f82f6]
/usr/local/lib/sendip/ipv6.so(set_addr+0x2d)[0x3eec69]
sendip(main+0x8eb)[0x804a635]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x126e37]
sendip[0x8048f81]
======= Memory map: ========
00110000-0026a000 r-xp 00000000 08:07 3408705  /lib/i386-linux-gnu/libc-2.13.so
0026a000-0026b000 ---p 0015a000 …
Run Code Online (Sandbox Code Playgroud)

c glibc

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

如何在ubuntu 11.10上调用setjmp?

我正在阅读专家c,并通过setjump和longjump部分,所以想在我的ubuntu 11.10上运行代码,但是当我包含setjump.h时,gcc编译器抱怨它找不到头文件,我发现/ user/include /目录中没有setjump.h.所以我该怎么做?你能给我一些建议吗?

c linux ubuntu glibc

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

检测到glibc - 双重免费或腐败

我在C中编写一个简单的堆栈程序,最后有一个灵活的void*数组.当需要更多的元素来推入数组时,我使用realloc()来创建一个新的堆栈,释放旧的堆栈并将新的分配给旧的堆栈.(我目前没有pop()函数).

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

typedef struct Stack
{
    int top, length;
    void* start_ptr[];
} Stack;

Stack* init_stack(int n_items)
{
    Stack* stack;
    stack = malloc(sizeof(int) * 3 + sizeof(void*) * n_items);

    stack->top = -1;
    stack->length = n_items;

    return stack;
}

Stack* increase_stacksize(Stack* stack, int n_itemsToAdd)
{
    Stack* newstack;    
    newstack = realloc(stack, sizeof(*stack) + sizeof(void*) * (n_itemsToAdd + stack->length));

    if(newstack != NULL)
         //printf("\nDebug print - array reallocated\n");

    free(stack);
    stack = newstack;

    stack->length += n_itemsToAdd;

    return stack;
}

Stack* push(Stack* stack, void* …
Run Code Online (Sandbox Code Playgroud)

c arrays memory-leaks glibc

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

不同的行为取决于架构

看来我在libc中遇到了一个可能的错误.我有以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

struct bla
{
    int a,b,c,d;
};

pthread_t tid;

void print (const char *s, const struct bla *fp);

void * thr_fn1 ( void * arg);

int main()
{
    struct bla *bla_main;

    pthread_create (&tid,NULL,thr_fn1,NULL);
    pthread_join (tid, (void *)  &bla_main);
    print ("Old thread: \n",bla_main);
    return 0;
}

void print (const char *s, const struct bla *bla_print)
{
    printf ("%s\n",s);
    printf ("Struct address: %p\n",bla_print);
    printf ("fp.a = %d\n",bla_print->a);
    printf ("fp.b = %d\n",bla_print->b);
    printf ("fp.c = …
Run Code Online (Sandbox Code Playgroud)

c linux malloc glibc

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

分配uninitilialized void*指针

#include <stdio.h>

void wat(void *ptr){
    *(int*)ptr = 0x4A424F4B;
    return;
}

int main(int argc, char **argv){
    FILE *wtf = fopen("wat", "wb");
    void *ptr;
    wat(ptr);
    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

这实际上编译并没有错误执行,你甚至可以fwrite的内容*(int*)ptr,你会得到0x4A424F4B.但是,当您删除此行时:

FILE *wtf = fopen("wat", "wb");
Run Code Online (Sandbox Code Playgroud)

*(int*)ptr = 0x4A424F4B;会突然导致分段错误.为什么?

c gcc glibc

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

malloc():内存损坏(快速)错误C++

我在C++工作.我正在研究一种方法来改变堆栈的最大容量,我对我得到的错误感到困惑.以下是我的方法.

void Stack::setCapacity(unsigned newCapacity){
if(newCapacity< this->getSize()){
    throw StackException("setCapacity()", 
    "the size is larger than the desired capacity");
} else {
    if(newCapacity != myCapacity){
        Item * tempArray = new Item[newCapacity];
        if(newCapacity < myCapacity){
            for(unsigned i=0; i<newCapacity;i++){
                tempArray[i] = myArray[i];
            }
        } else if (newCapacity > myCapacity) {
            for(unsigned i=0; i<myCapacity; i++){
                tempArray[i] = myArray[i];
            }
        }
        for(unsigned i=0; i<newCapacity; i++){
            myArray[i] = tempArray[i];
        }
        delete tempArray;
    }
    myCapacity = newCapacity;
} 
}
Run Code Online (Sandbox Code Playgroud)

我还编写了一个测试方法来测试我的setCapacity()方法是否有效.

void StackTester::setCapacityTest() {
cout << "- setCapacity... " << …
Run Code Online (Sandbox Code Playgroud)

c++ malloc stack glibc capacity

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

释放通过Python中的ctypes分配的内存

我有一个基于ctypes的库,它包装了一个C库,有时会分配需要释放的内存.在Linux下这很容易,因为常见的glibc功能已链接到该C库中,我可以简单地调用free()它.但是,当我在Windows下访问第三方编译的库时,看起来无法使用相同的功能.

ctypes.util.find_msvcrt()看起来很有希望,但即使我在Windows下运行,它也会返回None.我不确定这是否意味着源DLL是使用Microsoft工具链之外的其他东西构建的.

所以,我留下的记忆是自由的,没有明显的,简单的方法来做到这一点.有没有人有任何想法?

c python windows ctypes glibc

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

我对ASM的强烈反应

你好我学校的每个人都必须在ASM [intel] [NASM]做我自己的strdup功能.

我有一个奇怪的问题......

在我的代码中,如果我 call _malloc

我的代码段错误与此错误:

Program received signal SIGSEGV, Segmentation fault.
0x00007fff849612da in stack_not_16_byte_aligned_error () from /usr/lib/system/libdyld.dylib
Run Code Online (Sandbox Code Playgroud)

我不明白为什么,因为在.text中我说过 extern _malloc

有人知道我为什么会犯这个错误?:)

这是我的代码:

section .text
     global _ft_strdup
     extern _strlen
     extern _malloc
     ;  extern _ft_memcpy

_ft_strdup:
     call _strlen           ;rax = len of str
     mov r8, rdi            ;r8 = str = src
     inc rax                ;rax++
     ;  mov r9, rax         ;len of dest with '\0'
     mov rdi, rax           ;to send the len for malloc
     call _malloc           ;rax = ptr of dest …
Run Code Online (Sandbox Code Playgroud)

macos assembly glibc x86-64 nasm

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

C编译器参考实现

有多种语言具有其编译器/库的参考实现,但为什么C没有参考实现?
我知道GCC和glibc被广泛使用,微软有他们也使用的版本,但为什么不是一个主要的实现,例如python?(是的,我知道还有其他实现,但有一个MAIN/Reference python)是
不是与Linux和Windows等操作系统在C中实现至少部分API的事实有关吗?谢谢.

c compiler-construction winapi gcc glibc

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

为什么glibc库使用汇编

我正在看这个页面:https ://sys.readthedocs.io/en/latest/doc/01_introduction.html
,它解释了glibc如何进行系统调用.
在其中一个例子的代码进行检查,并且证明,这最后一条指令的glibc确实给真正做一个系统调用(意味着中断给CPU)是用汇编....那么,为什么在装配的glibc的一部分?通过在装配中写下那么小的部分有什么优势吗?
此外,运行时的共享库已经编译为机器代码正确吗?
那么为什么在编译之前使用两种不同的语言会有什么优势呢?谢谢.

c assembly gcc glibc

1
推荐指数
2
解决办法
252
查看次数