c和c++关于变量声明位置不同

c和c++关于变量声明位置不同

#include <stdio.h>
#include <string.h>
char name[]=”mygogou”;
int main()
{
char output[8];
strcpy(output, name);
for(int i=0;i<8&&name[i];i++)
printf(“\\0x%x”,name[i]);
return 0;
}

vc6.0报错信息

——————–Configuration: test – Win32 Debug——————–
Compiling…
tmsg.c
E:\as\vc-code\1\tmsg.c(8) : error C2143: syntax error : missing ‘;’ before ‘type’
E:\as\vc-code\1\tmsg.c(8) : error C2143: syntax error : missing ‘;’ before ‘type’
E:\as\vc-code\1\tmsg.c(8) : error C2143: syntax error : missing ‘)’ before ‘type’
E:\as\vc-code\1\tmsg.c(8) : error C2143: syntax error : missing ‘;’ before ‘type’
E:\as\vc-code\1\tmsg.c(8) : error C2065: ‘i’ : undeclared identifier
E:\as\vc-code\1\tmsg.c(8) : error C2059: syntax error : ‘)’
E:\as\vc-code\1\tmsg.c(9) : error C2146: syntax error : missing ‘;’ before identifier ‘printf’
Error executing cl.exe.

test.exe – 7 error(s), 0 warning(s)

经查证这是因为c和c++关于变量声明的一点点不同:

C语言是要求你必须将变量在函数开始处进行声明的,不支持在任意地方声明变量。

因此换成这样的就编译通过啦:

#include <stdio.h>
#include <string.h>
char name[]=”mygogou”;
int main()
{
char output[8];
int i;

strcpy(output, name);
for(i=0;i<8&&name[i];i++)
printf(“\\0x%x”,name[i]);
return 0;
}

Continue reading “c和c++关于变量声明位置不同”

Rootkit FAQ(how to…)

常见问题解答 : 如何入门rootkit?

来源:rootkit.com 作者:Clandestiny 翻译:fqh

“Help!我是一名新手!我需要一款rootkit入侵朋友的机器…我想编写自己的rootkit…我想开始开发代码… 该从哪里入手?”

此类问题在rootkit.com上不断地出现,并且重复回答一些人问的相同问题浪费了大量时间,我想到我们应当编辑一个短小的文档来对它们进行一般性的叙述。下面的论述远非完整的,社区中有经验的人可以提建议来对它进行拓展。

你 想知道从哪里入门?好的,首先,如果你来到这里是为了寻找入侵你朋友机器的既成方法,你可来错了地方!Rootkit.com主要是一个知识性的网站,它 目的是提供一些有关rootkit开发的资料和相关编程的文章。另一方面,如果你是一名想学习如何编写自己的rootkit的新手,你需要一些如何入门的 建议,请接着阅读…不幸的是,rootkit开发和软件开发需要相当多你必须掌握的前提知识:

1. 首先,你得学习一种语言。C / C++最好的选择。不像其他语言,C具有内嵌汇编语言的能力。虽然大多数程序员极少使用到汇编语言,但是rootkit的开发有时需要汇编语言的灵活性, 所以x86汇编应当成为你的辅助编程语言。Randall Hyde的《Art Of Assembly》是汇编编程最好的参考资料之一。该书有印刷和电子书两种可获取的版本。
《Art of Assembly》 (下载版) 的下载网址是http://webster.cs.ucr.edu/AoA/DOS/

2. 你需要学习一些操作系统的理论。虽然大学的设计操作系统理论课程不是必需的,但阅读大学计算机学科教材的若干章节是有益的。特别是进程﹑线程﹑内存管理等知识,你得了解。
这方面很好的书籍有两本:
《Operating System Concepts》 ,Silberschatz, Galvin, 和 Gagne著
《Operating Systems》Deitel & Deitel著

3. 你得应用理论知识,理解真实世界中的操作系统比如windows实际上是如何工作的。虽然Windows不公开源代码,但是有很多牛人热衷于对系统内核工 作原理进行逆向分析,并公开了他们的发现。弄一本此类的书吧,比如Sven Schreiber写的《Undocumented Windows 2000 Secrets》 或者Prasad Dabak, Milind Borate,和 Sandeep Phadke写《Undocumented Windows NT》。

4. 如果你想着手开发内核rootkit,你还得学习如何编写内核模式驱动程序(KMD)。很不幸,互联网上关于内核编程的教程,适合初学者的很少。不过,Four-4写出了几篇很好的win32汇编版的教程,它们可在http://www.assembly-journal.com/sitemap.php获 取。除此之外,这方面的书籍还有一些:包括Art Baker 和Jerry Lozano蓍的《The Windows 2000 Device Driver Book》以及Walter Oney蓍的《Programming The Microsoft Windows Driver Model》。

5. 学习逆向代码分析的基础知识,也就是说对于没有源代码的二进制文件也能(通过逆向分析)了解到(代码功能等)有关信息。练习逆向分析软件的保护机制(序列 号,时间检验,脱壳,演示软件的功能限制等等)是发展这个技能的有趣方式。有很多程序员编写了训练用的小型程序。这些程序称之“crackmes”和” “reversemes”,我们可用它们来进行练习。在http://www.crackmes.dehttp://www.reversemes.de上收集了大量这样的小程序。http://www.woodmann.com上有大量高手写的关于逆向工程的资源。http://bib.universitas-virtualis.org/上也有若干优秀教程和文章。逆向分析同样需要一些特别的工具,包括反汇编器和调试器。IDA Pro是首选的反汇编器,SoftICE (内核调试器)和OllyDebug是可供使用的调试器。其他各式各样的此类工具可从http://protools.cjb.net获取

6. 最后,本站讨论了一些入侵工具和rootkit,如果你需要理解它们的资料,我推荐Greg Hoglund的《Exploiting Software》(本站就有)和《Shell Coder’s Handbook》。两者都会提供给你很好的入门知识。《Exploiting Software》有一章节介绍了基本的rootkit技术。一般,基于它们的数据拦截方法,Rootkit可以分为两种:要么是挂勾,要么是直接内核对 象操作(DKOM)。为了理解挂勾技术,以下链接可能对你有帮助。

API 检测技术(API Spying Techniques)
http://www.internals.com/articles/apispy/apispy.htm
挂勾高级函数(Advanced Function Hooking)
http://www.phrack.org/show.php?p=58&a=8
挂勾Windows NT服务表(Windows NT Service Table Hooking)
http://www.wiretapped.net/~fyre/sst.html
挂勾Windows NT系统服务(Hooking Windows NT System Services)
http://www.windowsitlibrary.com/Content/356/06/2.html
挂勾Windows NT系统调用(Windows NT System-Call Hooking)
http://www.ddj.com/articles/1997/9701/
为了理解DKOM,你可以阅读fuzen_op 写的FU rookit的源代码,它可在本站中获取