分享
 
 
 

黑客基础知识

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

第一章

操作系统简介

本章主要介绍几个目前常见的操作系统。首先介绍Linux系统,一个自由软件。Linux对网络通信有很好的

支持,在介绍网络安全技术时,对网络技术进行实例时,没有Linux是不可能。

随后对Windows 9x的Msdos.sys的设置以及Windows NT中的注册表作了介绍。在理解安全技术时,这些也

是最基本的。

第一节

Linux

Linux下的C++编程

ELF和a.out

在Linux下,有两种可执行文件:ELF和a.out。有可能你的Linux只支持一种,有可能两种都支持。运

行一下命令file,如果命令输出包含ELF,则支持ELF,如果包含Linux/i386,则支持a.out。

GCC版本

使用下面命令,可以知道它的版本:

gcc -v

GCC安装后目录结构

/usr/lib/gcc-lib/target/version/ (及子目录) 编译器就在这个目录下。

/usr/bin/gcc可以从命令行执行的二进制程序在这个目录下。

/usr/target/(bin|lib|include)/ 库和头文件在这个目录下。

/lib/,/usr/lib和其他目录,系统的库在这些目录下。

符号定义

使用-V开关,就能看到GCC定义的符号。参见下列实例:

$ echo 'main(){printf("hello world");}' | gcc -E -v -

Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs

gcc version 2.7.2

/usr/lib/gcc-lib/i486-box-linux/2.7.2/cpp -lang-c -v -undef

-D__GNUC__=2 -D__GNUC_MINOR__=7 -D__ELF__ -Dunix -Di386 -Dlinux

-D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__i386

-D__linux -Asystem(unix) -Asystem(posix) -Acpu(i386)

-Amachine(i386) -D__i486__ -

GCC编译器使用简介

通常后跟一些选项和文件名来使用 GCC 编译器。gcc 命令的基本用法如下:

gcc [options] [filenames]

选项指定编译器怎样进行编译。

GCC选项

GCC 有100个编译选项。这些选项中的许多可能永远都不会用到,但一些主要的选项会经常遇到。很

多的 GCC

选项包括一个以上的字符,因此必须为每个选项指定各自的连字符。例如, 下面的两个命令是不同的:

gcc -p -g test.c

gcc -pg test.c

第一条命令告诉 GCC 编译 test.c 时为 prof 命令建立剖析(profile)信息并且把调试信息加入到可

执行的文件里。 第二条命令只告诉 GCC

为 gprof 命令建立剖析信息。

没有选项时,GCC 会生成一个名为 a.out 的可执行文件。

用 -o 编译选项来为将产生的可执行文件用指定的文件名来命名。例如, 将一个叫 count.c 的 C 程

序编译为名叫 count 的可执行文件,

要这样输入命令:

gcc -o count count.c

-c 选项告诉 GCC 仅把源代码编译为目标代码。缺省时 GCC 建立的目标代码文件有一个 .o 的扩展

名。

-S 编译选项告诉 GCC 在为 C 代码产生了汇编语言文件后停止编译。 GCC 产生的汇编语言文件的缺

省扩展名是 .s 。

-E 选项指示编译器仅对输入文件进行预处理。当这个选项被使用时, 预处理器的输出被送到标准输

出而不是储存在文件里.

用 GCC 编译 C 代码时, 它会试着用最少的时间完成编译并且使编译后的代码易于调试。

易于调试意味着编译后的代码没有经过优化。必要时,需要让编译器对代码进行优化。

-O 选项告诉 GCC 对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快。 -O2

选项告诉 GCC 产生尽可能小和尽可能快的代码。 -O2

选项将使编译的速度比使用 -O 时慢, 但通常产生的代码执行速度会更快。

GCC 支持数种调试和剖析选项,常用到的是 -g 和 -pg 。

-g 选项告诉 GCC 产生能被 GNU 调试器使用的调试信息以便调试你的程序。GCC 提供了一个很多其

他 C 编译器里没有的特性, 在 GCC 里你能使

-g 和 -O (产生优化代码)联用。

-pg 选项告诉 GCC 在编译好的程序里加入额外的代码。运行程序时, 产生 gprof 用的剖析信息以显

示你的程序的耗时情况。

用 gdb 调试 GCC 程序

Linux 包含了一个叫 gdb 的 GNU 调试程序。在程序运行时能观察程序的内部结构和内存的使用情况

。 以下是 gdb 所提供的一些功能:

监视程序中变量的值

设置断点,使程序在指定的代码行上停止执行。

一行行的执行代码

为了用GDB调试程序,在编译是必须指定调试选项。在命令行上键入 gdb 并按回车键就可以运行 gdb

了。如果一切正常的话, gdb

将被启动并在屏幕上显示:

GDB is free software and you are welcome to distribute copies of it under

certain conditions; type "show copying" to see the conditions.

There is absolutely no warranty for GDB; type "show warranty" for details.

GDB 4.14 (i486-slakware-linux), Copyright 1995 Free Software Foundation, Inc.

(gdb)

可以在启动GDB时,加入许多选项。也可以在这个命令后面直接指定要调试的程序。

gdb

gdb 基本命令

gdb 支持很多的命令,这些命令从简单的文件装入到允许检查所调用的堆栈内容的复杂命令。下表列出了

你在用 gdb 调试时会用到的一些命令。

命令 描 述

file 装入想要调试的可执行文件

kill 终止正在调试的程序

list 列出产生执行文件的源代码的一部分

next 执行一行源代码但不进入函数内部

step 执行一行源代码而且进入函数内部

run 执行当前被调试的程序

quit 终止 gdb

watch 使你能监视一个变量的值而不管它何时被改变

break 在代码里设置断点, 这将使程序执行到这里时被挂起

make 使你能不退出 gdb 就可以重新产生可执行文件

shell 使你能不离开 gdb 就执行 UNIX shell 命令

gdb 应用举例

下面列出了将被调试的程序,这个程序被称为 greeting ,显示一个简单的问候, 再用反序将它列出

#include

main ()

{

char my_string[] = "hello there";

my_print (my_string);

my_print2 (my_string);

}

void my_print (char *string)

{

printf ("The string is %s", string);

}

void my_print2 (char *string)

{

char *string2;

int size, i;

size = strlen (string);

string2 = (char *) malloc (size + 1);

for (i = 0; i

string2[size - i] = string[i];

string2[size+1] = `0';

printf ("The string printed backward is %s", string2);

}

用下面的命令编译这个程序:

gcc -o -g test test.c

运行编译好的程序,显示如下:

The string is hello there

The string printed backward is

输出的第一行是正确的, 但第二行打印出的东西并不是我们所期望的。我们所设想的输出应该是:

The string printed backward is ereht olleh

由于某些原因, my_print2 函数没有正常工作。用 gdb 看看问题究竟出在哪儿, 先键入如下命令:

gdb greeting

如果在输入命令时忘了把要调试的程序作为参数传给 gdb ,可以在 gdb 提示符下用 file 命令来载

入它:

(gdb) file greeting

这个命令载入 greeting 可执行文件,就象在 gdb 命令行里指定启动gdb装入它一样。

这时就能用 gdb 的 run 命令来运行 greeting 了。 当它在 gdb 里被运行后结果大约会象这样:

(gdb) run

Starting program: /root/greeting

The string is hello there

The string printed backward is

Program exited with code 041

这个

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有