小编jnd*_*dok的帖子

未请求分配的内存

我编写了一个简单的内存分配器,基本上创建了一个已分配块的链,它们使用存储在struct分配区域之前的元数据中的指针链接在一起.

代码工作得很好,我能够分配大小的块链,sz然后用我写的另一个函数释放.

问题是,我注意到,使用vmmap命令,显然内存是在malloc没有明确请求的情况下分配的.这vmmap是在程序执行的不同点采取的各种粘贴:

## before first alloc
# this has been taken before any allocation happens in the code.

REGION TYPE                      VIRTUAL
===========                      =======
Kernel Alloc Once                     4K
MALLOC                             9388K        see MALLOC ZONE table below
MALLOC (admin)                       24K
STACK GUARD                        56.0M
Stack                              8192K
VM_ALLOCATE                           8K <-- we start with 8K
__DATA                              668K
__LINKEDIT                         70.2M
__TEXT                             5860K
shared memory                         4K
===========                      =======
TOTAL                             149.8M

                                 VIRTUAL ALLOCATION      BYTES
MALLOC ZONE                         SIZE      COUNT …
Run Code Online (Sandbox Code Playgroud)

c memory

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

Python - 检测远程计算机是否已打开

所以,我有一个Python应用程序,但我想知道计算机(运行应用程序)是否已打开,来自另一台远程计算机.

有没有办法做到这一点?我正在考虑使用UDP数据包,使用计数器发送某种保持活动状态.防爆.客户端每隔5分钟向服务器发送一个UDP"keep-alive"数据包.提前致谢!

python udp heartbeat

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

如何在多个块中读取文件,直到EOF(C++)

所以,这是我的问题:我想创建一个从文件中读取数据块的程序.比方说,每个块有1024个字节.所以我读取了前1024个字节,执行各种操作,然后打开下一个1024字节,而不读取旧数据.该程序应该保持读取数据不会达到EOF.

我目前正在使用此代码:

std::fstream fin("C:\\file.txt");

vector<char> buffer (1024,0); //reads only the first 1024 bytes
fin.read(&buffer[0], buffer.size());
Run Code Online (Sandbox Code Playgroud)

但是如何读取下一个1024字节?我正在考虑使用for循环,但我真的不知道如何.我完全是C++中的菜鸟,所以如果有人能帮助我,那就太棒了.谢谢!

c++ file

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

缓冲区溢出不起作用

我试图在一个需要密码的简单程序上进行缓冲区溢出(我正在使用Linux).这是程序代码:

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

int check_authentication(char *password){

int auth_flag = 0;
char password_buffer[16];

strcpy(password_buffer, password);

if(strcmp(password_buffer, "pass1") == 0)
    auth_flag = 1;
if(strcmp(password_buffer, "pass2") == 0)
    auth_flag = 1;

return auth_flag;

}

int main(int argc, char **argv)
{

if(argc < 2){

    printf("\t[!] Correct usage: %s <password>\n", argv[0]);
    exit(0);

}

if(check_authentication(argv[1])){

    printf("\n-=-=-=-=-=-=-=-=\n");
    printf("  Access granted.\n");
    printf("-=-=-=-=-=-=-=-=\n");

} else {

    printf("\nAccess Denied.\n");

}


   return 0;

}
Run Code Online (Sandbox Code Playgroud)

好的,现在我编译它,没有错误,并将其保存为overflow.c.

现在我打开终端,我移动到文件目录(桌面),然后写道:

./overflow.c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Run Code Online (Sandbox Code Playgroud)

终端说:"堆栈粉碎检测到"(或类似的东西),然后退出程序执行.

现在,我正在读一本名为"黑客 - 剥削艺术"的书,由Jon Erickson撰写.在一章中,他解释了这种类型的漏洞利用(我从书中获取了代码)并执行了我所做的相同命令.内存溢出,程序打印"已授予访问权限".现在,为什么我的操作系统检测到我正在尝试利用该程序?我做错了什么?

我也在Mac OS X上尝试过这个漏洞.同样的事情发生了.拜托,有人可以帮帮我吗?提前致谢.

c buffer-overflow

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

在C中的Mac OS X上使用libpcap的嗅探器

我试图创建自己的嗅探器(仅适用于有趣),我在Mac上工作.我正在使用libpcap,这是一个非常好的嗅探库.所以,我使用了这个简单的嗅探器,它嗅探了5个数据包:(用C语言编写)

#include <pcap.h>
#include "hacking.h"

void pcap_fatal(const char *failed_in, const char *errbuf) {
     printf("Fatal Error in %s: %s\n", failed_in, errbuf);
     exit(1);
}

int main() {
    struct pcap_pkthdr header;
    const u_char *packet;
    char errbuf[PCAP_ERRBUF_SIZE];
    char *device;
    pcap_t *pcap_handle;
    int i;

device = pcap_lookupdev(errbuf);
if(device == NULL)
    pcap_fatal("pcap_lookupdev", errbuf);

printf("Sniffing on device %s\n", device);

pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf);
if(pcap_handle == NULL)
    pcap_fatal("pcap_open_live", errbuf);

for(i=0; i < 5; i++) {
    packet = pcap_next(pcap_handle, &header);
    printf("Got a %d byte packet\n", header.len); …
Run Code Online (Sandbox Code Playgroud)

c pcap packet-sniffers

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

将 std::string 数字转换为十六进制数字

我在网上搜索过,但似乎并不能解决我的问题。基本上我有一个std::string包含十六进制内存地址(例如0x10FD7F04)。显然,这个数字是从文本文件中读取并保存为std::string.

我需要将此字符串转换为 int 值,但保留十六进制表示法0x。有什么办法可以做到这一点吗?

c++ hex

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

用C++进行内存黑客攻击/修改

所以,我正在尝试用C++编写程序,以修改另一个程序中的值.就我而言,Windows的计算器.这是代码:

#include <iostream>
#include <windows.h>

using namespace std;

int main(void) {

    int nVal = 2000;

    HWND hWnd = FindWindowA(0, "Calculator");
    if(hWnd == 0){
        cerr << "Could not find window." << endl;
    } else {
        DWORD PID;
        GetWindowThreadProcessId(hWnd, &PID);
        HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, false, PID);

        if(!hProc) {
            cerr << "Cannot open process." << endl;
        } else {
            int stat = WriteProcessMemory(hProc, (LPVOID)0xC6A0EB922C, &nVal, (DWORD)sizeof(nVal), NULL);

            if(stat > 0){
                clog << "Memory written to process." << endl;
            } else {
                cerr << …
Run Code Online (Sandbox Code Playgroud)

c++ memory

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

标签 统计

c ×3

c++ ×3

memory ×2

buffer-overflow ×1

file ×1

heartbeat ×1

hex ×1

packet-sniffers ×1

pcap ×1

python ×1

udp ×1