nse_string.cc
来自「Ubuntu packages of security software。 相」· CC 代码 · 共 82 行
CC
82 行
#include "nse_string.h"#include "nbase.h"#include "nse_macros.h"#include <sstream>#include <iomanip>int nse_isprint(int c) { return ISPRINT(c);}char* nse_printable(const void *data, unsigned int data_len) { const unsigned char* c_data = (const unsigned char*) data; char* result = (char*) safe_malloc((data_len+1)*sizeof(char)); unsigned int i; for(i = 0; i < data_len; i++) { if(nse_isprint(c_data[i])) result[i] = c_data[i]; else result[i] = NOT_PRINTABLE; } result[i] = '\0'; return result;}char* nse_hexify(const void *data, unsigned int data_len) { std::ostringstream osDump; std::ostringstream osNums; std::ostringstream osChars; const unsigned char* c_data = (const unsigned char*) data; unsigned long i; unsigned int width = 16; unsigned long printable_chars = 0; // if more than 95% of all characters are printable, we don't hexify for(i = 0; i < data_len; i++) { if(nse_isprint(c_data[i])) printable_chars++; } if((double)printable_chars > (double)data_len * 95.0 / 100.0) { return nse_printable(data, data_len); } osDump << std::endl; for(i = 0; i < data_len; i++) { if(i < data_len) { char c = c_data[i]; unsigned short n = (unsigned short)c_data[i]; osNums << std::setbase(16) << std::setw(2) << std::setfill('0') << n << " "; osChars << ((n < 32) || (n > 126) ? NOT_PRINTABLE : c); } if(((i % width) == width - 1) || ((i == data_len) && (osNums.str().size() > 0))) { osDump << std::setbase(16) << std::setw(8) << std::setfill('0') << (i - (i % width)) << ": " << std::setfill(' ') << std::setiosflags(std::ios_base::left) << std::setw(3 * width) << osNums.str() << osChars.str() << std::resetiosflags(std::ios_base::left) << std::endl; osNums.str(""); osChars.str(""); } } return strdup(osDump.str().c_str());}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?