我编写了一个简单的内存分配器,基本上创建了一个已分配块的链,它们使用存储在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) 所以,我有一个Python应用程序,但我想知道计算机(运行应用程序)是否已打开,来自另一台远程计算机.
有没有办法做到这一点?我正在考虑使用UDP数据包,使用计数器发送某种保持活动状态.防爆.客户端每隔5分钟向服务器发送一个UDP"keep-alive"数据包.提前致谢!
所以,这是我的问题:我想创建一个从文件中读取数据块的程序.比方说,每个块有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++中的菜鸟,所以如果有人能帮助我,那就太棒了.谢谢!
我试图在一个需要密码的简单程序上进行缓冲区溢出(我正在使用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上尝试过这个漏洞.同样的事情发生了.拜托,有人可以帮帮我吗?提前致谢.
我试图创建自己的嗅探器(仅适用于有趣),我在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) 我在网上搜索过,但似乎并不能解决我的问题。基本上我有一个std::string
包含十六进制内存地址(例如0x10FD7F04)。显然,这个数字是从文本文件中读取并保存为std::string
.
我需要将此字符串转换为 int 值,但保留十六进制表示法0x。有什么办法可以做到这一点吗?
所以,我正在尝试用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)