草庐IT

buffer-overflow

全部标签

c++ - GOOGLE_PROTOBUF_MIN_PROTOC_VERSION 检查期间编译时出现 Protocol Buffer 错误

我目前收到一个错误,它指向protoc生成的头文件中的这些行:#if2006001但我的协议(protocol)版本与上面的版本匹配:protoc--versionlibprotoc2.6.1我做错了什么?最初我的protoc版本是3.0.0然后通过同步回2.6.1并执行这些步骤重新安装它;makedistclean,./configure,make,makeinstall安装所需的2.6.1版本。我需要旧版本,因为那是我们服务器中安装的版本。 最佳答案 问题是您系统上安装的header(在/usr/include/google/p

c++ - 缩小从 double 到 float 的转换 : is overflow behaviour guaranteed?

如果我试试这个floatf=(float)numeric_limits::infinity();或者实际上,尝试将任何大于floatmax的值转换为float,我能保证最终得到无穷大吗?它适用于GCC,但它是标准吗? 最佳答案 floatf=(float)numeric_limits::infinity();这保证设置f如果您的编译平台提供用于浮点计算的IEEE754算法(通常会提供),则为无穷大。Orindeed,trytocastanythingbiggerthanfloatmaxdowntoafloat,amIguarante

c++ - 了解 MSVC++ 中的 "Buffer Security Check/GS"编译器选项

我最近惊讶地注意到,在MSVC++2010中使用/GS(启用缓冲区安全检查)进行编译似乎在某些情况下对运行时性能具有不可忽略的影响。有没有人有过这样的经历??对于大型科学风格的应用程序(网格生成库),似乎使用/GS-进行编译可以使我的几个大型基准测试的运行时间提高近10%测试套件(“大”是>=1秒的运行时间)。/GS在MSVC++2010中的所有优化级别默认处于启用状态。我必须承认,我以前从未过多关注过这个选项,我想澄清一下它的实际作用。在线documentation似乎广泛谈论字符串缓冲区,但由于我不在任何地方使用string或char[]缓冲区,我一定遗漏了一些东西。这段(来自在线

c++ - 谷歌 Protocol Buffer 消息到字节数组 C++

我目前使用两种消息协议(protocol),一种是googleproto,另一种是c-structs。将谷歌ProtocolBuffer消息(MessageLite)转换为字节数组的最佳解决方案是什么?例如,我想转换以下googleproto消息:messageGoogleRequest{optionalint32request=1[default=0];}到:structRequest{intrequest;};我已经尝试了以下但它不起作用:GoogleRequestreqMsg;reqMsg.set_request(1234);intsize=reqMsg.ByteSize();R

windows - Windows 上的 gVIM : execute buffer and paths with spaces

在gVimforwindows中,可以通过:!%命令执行当前缓冲区。但是,不幸的是,缓冲区文件名提供给cmd.exe时没有引号,所以如果文件路径有空格,gVim将无法执行它。是否有任何简单的方法来修复它以便能够从gVim中执行.bat、.py等? 最佳答案 这是我的猜测,我没有windows机器可以尝试。尝试:!python"%"或:!"%"信用:hell之眼 关于windows-Windows上的gVIM:executebufferandpathswithspaces,我们在Stack

c# - 使用 FileStream 和 FILE_FLAG_NO_BUFFERING 读取文件

一些背景知识:我一直在尝试在对大文件进行IO时使用FILE_FLAG_NO_BUFFERING标志。我们正在尝试减少缓存管理器的负载,希望通过后台IO减少我们的应用程序对用户机器的影响。性能不是问题。尽可能多地躲在幕后是一个大问题。我有一个用于执行无缓冲IO的接近工作的包装器,但我遇到了一个奇怪的问题。当我使用不是4的倍数的偏移量调用Read时出现此错误。Handledoesnotsupportsynchronousoperations.TheparameterstotheFileStreamconstructormayneedtobechangedtoindicatethattheh

windows - STATUS_STACK_BUFFER_OVERRUN 和 STATUS_STACK_OVERFLOW 有什么区别?

我刚刚发现有一个STATUS_STACK_BUFFER_OVERRUN和一个STATUS_STACK_OVERFLOW。这两个有什么区别?我刚找到Stackoverflow(stackexhaustion)notthesameasstackbufferoverflow但要么它没有解释它,要么我不明白。你能帮帮我吗?问候托拜厄斯 最佳答案 考虑以下在内存中向下增长的堆栈:+----------------+|somedata||+----------------+|growthofstack|20-bytestring|V+-----

windows - Win32 EXCEPTION_INT_OVERFLOW 与 EXCEPTION_INT_DIVIDE_BY_ZERO

我对EXCEPTION_INT_OVERFLOW和EXCEPTION_INT_DIVIDE_BY_ZERO异常有疑问。Windows将捕获由IDIV指令生成的#DE错误,并最终使用这两个代码之一生成SEH异常。我的问题是它如何区分这两种情况?Intel手册中关于idiv的信息表明它会在“被零除”和“下溢情况”下生成#DE。我快速浏览了intel手册第3卷中关于#DE错误的部分,我能收集到的最好的信息是操作系统必须解码DIV指令,加载除数参数,然后进行比较归零。虽然我觉得这有点疯狂。为什么芯片设计者不使用某种标志来区分错误的2个原因?我觉得我一定错过了什么。有谁确切知道操作系统如何区分这

windows - VIM : How to map command according to buffer type?

我知道我的标题没有那么描述性/清晰,所以让我解释一下。昨天我能跨Vimgrepandcopen所以我在.vimrc中添加了以下行nnoremap,/:execute'vimgrep/'.@/.'/g%':copen它所做的是打开一个quickfixlist对于searched(highlighted)vim中的单词。现在当你按下Enter在quickfix列表中,它会将您带到主Vim窗口中的相应行。现在,我面临的问题是我已经映射了我的喜欢mapo这会在当前行下方创建一个新行。因此,如您所见,两者之间存在冲突。所以,我正在尝试的是想出一个像这样的vim函数伪代码functionIfNot

windows - sox 失败实用程序 : Unable to load MAD decoder library (libmad) function "mad_stream_buffer"

我为sox编译了libmad。当我尝试阅读mp3时,我收到此消息:soxFAILutil:无法加载MAD解码器库(libmad)函数“mad_stream_buffer”。我是不是编译错了项目? 最佳答案 使用SOX创建MP3的步骤:下载最新版本SOX并安装。下载libmad-0.dll和libmp3lame-0.dll。目前唯一已知的可信赖来源是ossbuild但这需要您下载1.5GB的存档。所选的两个文件可用here和here.将libmad-0.dll和libmp3lame-0.dll添加到安装SOX的文件夹中。使用命令行将文