我正在开发一个垃圾文件生成器,但由于某种原因,如果我使用大数字,它将无限地发出哔声,直到文件完成,我认为在ascii表中某处有一个字符,或者它溢出并导致错误蜂鸣声.有人想解释为什么这件事在尖叫我吗?
#include <string>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <time.h>
#include <windows.h>
#define print cout<<
using namespace std;
int numberof,i;
char charvalue;
string charlist,filename;
int main()
{
srand (time(NULL));
print "What do you want the name of your file to be?(with a .txt extension)\n";
getline(cin,filename);
print "\nHow many characters do you want?\n";
cin>>numberof;
for(numberof>0;numberof!=0;numberof--)
{
i = rand() % 255 + 32;
charvalue=i;
charlist=charlist+charvalue;
print charlist;
}
ofstream writefile(filename.c_str());
writefile<<charlist;
writefile.close();
ShellExecute(NULL, "open", filename.c_str(), NULL, NULL, SW_SHOWNORMAL); …Run Code Online (Sandbox Code Playgroud) #include <WhatHere?>
#include <WhatHere?>
#include <WhatHere?>
int main(int argc, char **argv) {
char command[50] = "echo ";
strcat(command,argv[1]); // concatenate the input so that the final command is "echo <input>"
system(command); // call the system() function to print the input
return 0; // denote that the program has finished executing successfully
}
Run Code Online (Sandbox Code Playgroud)
我们可以通过运行此代码获得远程访问吗?我知道这是可能的,但请帮我修补它.
我需要在已经gcc 4.4.5安装的办公室计算机上构建一些旧代码.我编辑了代码(删除.h或添加类似的东西<cstring>)以使它们更新,以便可以编译它们gcc 4.4.5.但是,在看似成功的编译之后,二进制文件在每次运行时都会发出缓冲区溢出.但是代码运行时我的计算机上没有错误(gcc 4.1.2).那么我做出的改变是否可能导致此错误?我不确定,因为我不是真正的程序员.
我需要有两个缓冲区(A和B),当其中一个缓冲区已满时,需要将其内容写入"合并"缓冲区 - C.对于此操作,使用memcopy似乎太慢,如我在下面的问题中所述.任何见解?'
我没有尝试,但我被告知memcopy将无法正常工作.这是一个嵌入式系统.2个缓冲区.两种不同的尺寸,当它们完全愚蠢到一个普通的'C'缓冲区,这个缓冲区比其他两个更大..不知道为什么我的评级下降了..
编辑:缓冲区A和B将在C完全为空之前写入.
该存储器复制的时间过长和公共缓冲"C"越来越超限.
我正在学习PHP的循环,因为我做了FOR循环,似乎我搞砸了.基本上,这发生了:
for($i = 2; $i++; $i < 26) {
print $i;
}
Run Code Online (Sandbox Code Playgroud)
我通过最后添加$ i ++来修复它.但我的问题是:这是缓冲区溢出吗?它超过10000
我正在学习C并经历一个包含valgrind使用的教程.我还在了解valgrind实际上在做什么,并想知道是否有人可以解释为什么它没有检测到以下代码中的任何错误:
#include <stdio.h>
int main(int argc, char *argv[])
{
int numbers[4] = {0,1,2,3,4};
// first, print them out raw
printf("numbers: %d %d %d %d %d\n",
numbers[0], numbers[1],
numbers[2], numbers[3],
numbers[4]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我确实遇到编译器错误:
greggery@Lubu:~/code$ make lc
cc -Wall -g lc.c -o lc
lc.c: In function ‘main’:
lc.c:5:2: warning: excess elements in array initializer [enabled by default]
lc.c:5:2: warning: (near initialization for ‘numbers’) [enabled by default]
Run Code Online (Sandbox Code Playgroud)
但是当我对着valgrind运行时,它没有看到任何错误:
==2300== Memcheck, a memory error detector
==2300== Copyright (C) 2002-2012, and GNU GPL'd, …Run Code Online (Sandbox Code Playgroud) 我买了"黑客 - 剥削艺术"这本书.其中一个内容是缓冲区溢出.我想我明白他们是如何工作的,但是,我不明白为什么有人会这样做.
让我假装我有一个不安全的程序.任何黑客都可能轻易导致缓冲区溢出.所以呢?那些黑客不知道它是哪个程序,即使他们愿意,他们还能做什么?他们没有我的电脑......即使他们没有登录就无法启动该程序,对吧?
所以基本上我的问题是,在什么情况下黑客会导致缓冲区溢出?他会怎么做?通过互联网?然后什么?
我希望我能在这个问题上找到合适的位置.我真的不明白为什么这样一个不安全的程序是如此重要.
我刚刚在课程上标记了这个错误的解决方案,在c中缓冲区溢出但是没有提供关于它是如何错误的反馈.有人能让我知道问题是什么吗?谢谢.
该问题提出了一个解决方案,以防更长的字符串传递给此函数:
void function(char *str)
{
char buffer[16];
strcpy(buffer, str);
}
Run Code Online (Sandbox Code Playgroud)
这是我的解决方案
void function(char *str)
{
size_t str_length = strlen(str);
char buffer[str_length];
strcpy(buffer, str);
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我的CS课程中有一个以缓冲区溢出攻击为中心的项目.
我很难完全理解这个话题.
说我有以下功能:
08048cc5 <getbuf>:
8048cc5: 55 push %ebp
8048cc6: 89 e5 mov %esp,%ebp
8048cc8: 83 ec 38 sub $0x38,%esp
8048ccb: 8d 45 d8 lea -0x28(%ebp),%eax
8048cce: 89 04 24 mov %eax,(%esp)
8048cd1: e8 32 01 00 00 call 8048e08 <Gets>
8048cd6: b8 01 00 00 00 mov $0x1,%eax
8048cdb: c9 leave
8048cdc: c3 ret
Run Code Online (Sandbox Code Playgroud)
目前它返回此功能:
08048c53 <test>:
8048c53: 55 push %ebp
8048c54: 89 e5 mov %esp,%ebp
8048c56: 83 ec 28 sub $0x28,%esp
8048c59: e8 63 04 00 00 call …Run Code Online (Sandbox Code Playgroud) 以下代码不生成空终止符
/* Case 1 */
#include <stdio.h>
void main () {
char wbuf[16] = "0123456789abcdef";
printf("%s\n", wbuf);
}
Run Code Online (Sandbox Code Playgroud)
请参阅拆卸的相关部分
0x4005b4 <main+23>: movabs $0x3736353433323130,%rax
0x4005be <main+33>: mov %rax,-0x20(%rbp)
0x4005c2 <main+37>: movabs $0x6665646362613938,%rax
0x4005cc <main+47>: mov %rax,-0x18(%rbp)
0x4005d0 <main+51>: lea -0x20(%rbp),%rax --->prinft related
0x4005d4 <main+55>: mov %rax,%rdi
0x4005d7 <main+58>: callq 0x400470 <puts@plt>
Run Code Online (Sandbox Code Playgroud)
以下代码生成一个:
/* Case 2 */
#include <stdio.h>
void main () {
char wbuf[17] = "0123456789abcdef";
printf("%s\n", wbuf);
}
Run Code Online (Sandbox Code Playgroud)
再次看到拆卸的相关部分
0x4005b4 <main+23>: movabs $0x3736353433323130,%rax
0x4005be <main+33>: mov %rax,-0x20(%rbp)
0x4005c2 <main+37>: movabs …Run Code Online (Sandbox Code Playgroud)