⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ccbuf.cpp

📁 将exe等可执行文件转化成c程序的反编译程序,先到汇编再到c
💻 CPP
字号:
// Copyright(C) 1999-2005 LiuTaoTao,bookaa@rorsoft.com

#include "stdafx.h"
#include "00000.h"
#include "CCbuf.h"

#include <io.h>

//	----------------------------------------------------------
CCbuf::CCbuf()
{
	this->f_str = 0;
}


void CCbuf::LoadFile(FILE *f)
{
	long flen = filelength(fileno(f));
	char *buf = new char[flen];
	fread(buf,1,flen,f);
	
	m_p = new char[flen+1];	//thats enough
	m_len = 0;

	for (long i = 0; i < flen; i++)
	{
		OneChar(buf[i]);
	}
	OneChar(EOF);
	delete buf;
	assert((long)m_len <= flen+1);
}

void CCbuf::OneLine(PCSTR pstr)
{
	while (*pstr)
	{
		OneChar(*pstr++);
	}
	OneChar(0);
}
void CCbuf::OneChar(int c3)
{	
	if (c3 == 0)
		c3 = 0;
	if (c3 == '\r')
		c3 = '\n';

	//	c3 是 input char 或 EOF
	//	如果有效,则把c3 加到p所指的buf,同时 len++
	int i = m_len;
	PSTR p = m_p;

	if (c3 == EOF)
	{
		assert(f_str == 0);
		OneChar(0);
		return;
	}
	char c = (char)c3;

	if ( f_str == 0)
	if ( i >= 2)
	{
		if (p[i-2] == '/' && p[i-1] == '/')
		{
			if (c == '\n' || c == 0)
			{
				m_len -= 2;
				OneChar(0);
				return;
			}
			else
				return;	//do nothing
		}
		if (p[i-2] == '/' && p[i-1] == '*')
		{
			static char c1 = 0;
			if (c1 == '*' && c == '/')
			{
				m_len -= 2;
				return;
			}
			c1 = c;
			return;
		}
	}

	if ( f_str )
	{
		static BOOL f = FALSE;	//	for '\\'
		if (c == 0 || c == '\n')
			assert(("hello",0));	//error !
		if (f)
		{
			f = FALSE;
		}
		else
		{
			if (c == '\\')
				f = TRUE;
			if (c == f_str)
				f_str = 0;
		}
	}
	else
	{
		if (c == '\'' || c == '\"')
			f_str = c;
	}
	
	
	switch (c)
	{
	case 0:
	case '\n':
		p[i] = 0;
		m_len++;
		if (i > 0)
		{
			//	把后面的空格去掉
			//	空行去掉
			if (p[i-1] == ' ' || p[i-1] == '\0')
			{
				p[i-1] = 0;
				m_len--;
				return;
			}
			//	检查是不是拐行符
			if ( p[i-1] == '\\')
			{
				m_len -= 2;
				return;		//	不拐了
			}
		}
		break;
	case '\t':
	case ' ':
		if (i == 0 || p[i-1] == '\0')
			break;	//	第一个字符就是空格是不允许的

		if (f_str == 0 && p[i-1] == ' ')
			break;	//	如果前面已经有一个空格,就算了

		c = ' ';
		//continue to next
	default:
		p[i] = c;
		m_len++;
		break;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -