??xml version="1.0" encoding="utf-8" standalone="yes"?>
Note that for these to work, the control must have the "LVS_REPORT" style. For list controls in dialogs, including dialogs for CFormView, this style can be set in the dialog editor. If you are using CListView or you are creating list controls using Create, the style can be set in a PreCreateWindow override, as in:
Getting a Count of Columns
Deleting All Columns
Using GetColumnsCount() from above, it is easy to delete all columns.
Microsoft has made things very confusing because the Platform SDK name for a listbox is "ListBox Control" but MFC programmers usually use "list control" to refer to an instance of the CListCtrl class, which is confusing. Also, the MFC class name for a "List View Control" is CListCtrl and CListView is the view class for it. The MFC class name for a "ListBox Control" is CListBox so we would expect the view class for it to also be CListView except there is not a view class. The following summarizes this.
Platform SDK name:List Boxes
Window class name: ListBox (See under "Predefined Controls" in User Controls and the documentation for CreateWindow and CreateWindowEx)
MFC class name:CListBox
MFC view class name: none
Platform SDK name:ListView Control
Window class name: SysListView32 (use WC_LISTVIEW in source code instead, which is defined as "SysListView32")
MFC class name:CListCtrl
MFC view class name:CListView
l构体对齐的具体含义Q?pragma packQ?/p>
作者:panic2005q???/p>
q是来自csdn的帖子:
丅R 题: 探讨Q内存对?br />作 者: typedef_chen ((名未?(我要骗h))
{ U:
??| 100
所属论坛: C/C++ C++ 语言
问题ҎQ? 50
回复ơ数Q? 1
发表旉Q? 2005-04-02 22:53:27
朋友帖了如下一D代码:
#pragma pack(4)
class TestB
{
public:
int aa;
char a;
short b;
char c;
};
int nSize = sizeof(TestB);
q里nSizel果?2Q在预料之中?/p>
现在LW一个成员变量ؓ如下代码Q?br /> #pragma pack(4)
class TestC
{
public:
char a;
short b;
char c;
};
int nSize = sizeof(TestC);
按照正常的填充方式nSize的结果应该是8Qؓ什么结果显CnSize?呢?
事实上,很多人对#pragma pack的理解是错误的?br />#pragma pack规定的对齐长度,实际使用的规则是Q?br />l构Q联合,或者类的数据成员,W一个放在偏UMؓ0的地方,以后每个数据成员的对齐,按照#pragma pack指定的数值和q个数据成员自n长度中,比较的那个q行?br />也就是说Q当#pragma pack的值等于或过所有数据成员长度的时候,q个值的大小不产生M效果?br />而结构整体的寚wQ则按照l构体中最大的数据成员 ?#pragma pack指定?之间Q较的那个q行?br />
具体解释
#pragma pack(4)
class TestB
{
public:
int aa; //W一个成员,攑֜[0,3]偏移的位|,
char a; //W二个成员,自n长ؓ1Q?pragma pack(4),取小|也就?Q所以这个成员按一字节寚wQ放在偏U[4]的位|?br /> short b; //W三个成员,自n?Q?pragma pack(4)Q取2Q按2字节寚wQ所以放在偏U[6,7]的位|?br /> char c; //W四个,自n长ؓ1Q放在[8]的位|?br /> };
q个cd际占据的内存I间?字节
cM间的寚wQ是按照cd部最大的成员的长度,?pragma pack规定的g中较的一个对齐的?br />所以这个例子中Q类之间寚w的长度是min(sizeof(int),4)Q也是4?br />9按照4字节圆整的结果是12Q所以sizeof(TestB)?2?/p>
如果
#pragma pack(2)
class TestB
{
public:
int aa; //W一个成员,攑֜[0,3]偏移的位|,
char a; //W二个成员,自n长ؓ1Q?pragma pack(4),取小|也就?Q所以这个成员按一字节寚wQ放在偏U[4]的位|?br /> short b; //W三个成员,自n?Q?pragma pack(4)Q取2Q按2字节寚wQ所以放在偏U[6,7]的位|?br /> char c; //W四个,自n长ؓ1Q放在[8]的位|?br /> };
//可以看出Q上面的位置完全没有变化Q只是类之间改ؓ?字节寚wQ??圆整的结果是10?br />//所?sizeof(TestB)?0?/p>
最后看原脓Q?br />现在LW一个成员变量ؓ如下代码Q?br /> #pragma pack(4)
class TestC
{
public:
char a;//W一个成员,攑֜[0]偏移的位|,
short b;//W二个成员,自n?Q?pragma pack(4)Q取2Q按2字节寚wQ所以放在偏U[2,3]的位|?br /> char c;//W三个,自n长ؓ1Q放在[4]的位|?br /> };
//整个cȝ大小?字节Q按照min(sizeof(short),4)字节寚wQ也是2字节寚wQ结果是6
//所以sizeof(TestC)??br />
感谢Michael 提出疑问Q在此补充:
当数据定义中出现__declspec( align() )Ӟ指定cd的对齐长度还要用自n长度和这里指定的数值比较,然后取其中较大的。最l类/l构的对齐长度也需要和q个数值比较,然后取其中较大的?/strong>
可以q样理解Q?!--StartFragment --> __declspec( align() ) ?#pragma pack是一对兄弟,前者规定了寚w的最|后者规定了寚w的最大|两者同时出现时Q前者拥有更高的优先U?br />__declspec( align() )的一个特ҎQ它仅仅规定了数据对齐的位置Q而没有规定数据实际占用的内存长度Q当指定的数据被攄在确定的位置之后Q其后的数据填充仍然是按?pragma pack规定的方式填充的Q这时候类/l构的实际大和内存格局的规则是q样的:
在__declspec( align() )之前Q数据按?pragma pack规定的方式填充,如前所q。当遇到__declspec( align() )的时候,首先L距离当前偏移向后最q的寚w点(满寚w长度为max(数据自n长度,指定? )Q然后把被指定的数据cd从这个点开始填充,其后的数据类型从它的后面开始,仍然按照#pragma pack填充Q直到遇C一个__declspec( align() )?br />当所有数据填充完毕,把结构的整体寚w数值和__declspec( align() )规定的值做比较Q取其中较大的作为整个结构的寚w长度?br />特别的,当__declspec( align() )指定的数值比对应cd长度的时候,q个指定不v作用?/p>
]]>
It is assumed that the readers of the sample have already created a dialog box (either in a dialog based application or SDI/MDI application) and placed a combo box control from the controls toolbox on the Resource Editor.
After placing the combo box control on the dialog box, open the class wizard by pressing Ctrl + W keys or Menu --> View --> ClassWizard. In the Member Variables tab, Add a Variable for the CComboBox class. This CComboBox example assumes that the variable name is,
CComboBox m_cbExample;
This m_cbExample will be used further in our CComboBox example MFC code.
The function AddString is used for adding items to a combo box. If there is a constant set of data, these values can also be added in the Resource Editor itself. The Combo Box control properties dialog has a tab for adding data. Otherwise the data can be added as follows.
m_cbExample.AddString("StringData1");
m_cbExample.AddString("StringData2");
m_cbExample.AddString("StringData3");
Usually To do this, the first step is to find out the index of the selected item inside the combo box control. The string position inside the combo box control is the return value. It returns CB_ERR if it was unsuccessful in finding the string.
a requirement for retrieving items from the combo box will arise from selecting the data. This article also assumes the same. Now the data selected in a combo box needs to be retrieved.
Then the item at the corresponding position needs to be pulled out as follows.
int nIndex = m_cbExample.GetCurSel();
CString strCBText;
m_cbExample.GetLBText(
nIndex, strCBText);
In the above CComboBox example code, the value will be retrieved and stored in strCBText variable. There is another overloaded version for GetLBText. But the version which uses CString is the easiest one.
CComboBox Example - Finding Items inside a Combo Box:
This kind of Find operations on a Combo box will most probably be useful in programs that dynamically modify the values in a combo box. The function FindStringExact is used to find the exact string match inside a combo box.
int nIndex = m_cbExample.FindStringExact(0, "Value to be found");CComboBox Example - Deleting Items from a Combo Box:
This operation can be done by using the CCombobox member function DeleteString. This function needs the index of the item inside the combo box.
m_cbExample
.DeleteString(nIndex);
1Q单行注释。格式:// Comments
2Q多行注释。格式:/* Comments... */
C#引入了新的XML注释Q即我们在某个函数前新v一行,输入///QVS.Net会自动增加XML格式的注释,q里整理一下可用的XML注释?/p>
XML注释分ؓ一U注释(Primary TagsQ和二注释QSecondary TagsQ,前者可以单独存在,后者必d含在一U注释内部?/p>
I 一U注?/p>
1. <remarks>对类型进行描qͼ功能cM<summary>Q据说徏议?lt;remarks>;
2. <summary>对共有类型的cR方法、属性或字段q行注释Q?/p>
3. <value>主要用于属性的注释Q表C属性的制的含义Q可以配?lt;summary>使用Q?/p>
4. <param>用于Ҏ法的参数q行说明Q格式:<param name="param_name">value</param>Q?/p>
5. <returns>用于定义Ҏ的返回|对于一个方法,输入///后,会自动添?lt;summary>?lt;param>列表?lt;returns>Q?/p>
6. <exception>定义可能抛出的异常,格式Q?lt;exception cref="IDNotFoundException">Q?/p>
7. <example>用于l出如何使用某个Ҏ、属性或者字D늚使用ҎQ?/p>
8. <permission>涉及Ҏ的访问许可;
9. <seealso>用于参考某个其它的东东:)Q也可以通过cref讄属性;
10. <include>用于指示外部的XML注释Q?/p>
II 二注释
1. <c> or <code>主要用于加入代码D;
2. <para>的作用类似HTML中的<p>标记W,是分段Q?/p>
3. <pararef>用于引用某个参数Q?/p>
4. <see>的作用类?lt;seealso>Q可以指C其它的ҎQ?/p>
5. <list>用于生成一个列表;
另外Q还可以自定义XML标签?/p>
呵呵Q通过在工E的属性中讄 XML Documentation File的文件名Q即可生成xml格式的文件?/p>
另外q有一个有用的工具叫NDocQ可以根据这些注释生成帮助文Ӟ很好ѝ但是好像不支持Vs.net 2005?/p>
木马客户端与服务端通讯如何隐藏不被发现
一个成功的木马必须实现一U既可靠Q又不易被宿d现的通讯ҎQ下面在我所知的范围内对各种Ҏ的实现方法,可靠性,安全性做一些探讨。文中错误之处一定很多,Ƣ迎大家指出Q更希望能有木马开发经验的高手写一些这斚w的文章,能让不管是黑客,q是普通用P都得C定的提高。至于什么警告的我也不多说了Q反正看了文章你d坏事与我是毫无关pȝ。下面进入正题?
首先应该明确的是受害者的机器上运行的木马E序我们UC为服务端Q控制者机器上q行的我们称之ؓ客户?其实对于C的木马,已经很难说谁是客P谁是服务了,不过我们q是l箋用这U叫?。另外虽然Windows9x仍然有巨大的用户基础Q但是Windows9x向Windows XPq徙只是早晚问题Q所以这里的讨论主要是针对NT/2000/XPq_的?/p> 1.使用TCP协议Q服务端侦听Q客Lq接 q是最单,最早,最q泛使用的一U通讯Ҏ。用过冰河或者被冰河客户端扫q的Ҏ一定不会陌生。这U通讯Ҏ是服务端在宿L器上开一个TCP端口Q然后等待客L的连接,在通过对客L的认证后Q客L可以控制服务端了。由于是建立在TCP协议基础上,所以通讯的可靠性是得到保证的。但是通讯的安全性却很成问题。首先,使用像fport,tcpview proq样的工具可以很Ҏ的发现在某一端口上侦听的q程Q以及进E对应的可执行文件。其ơ,在安装了防火墙的机器上,当客Lq接到服务端Ӟ很容易引起防火墙报警?/p> 2.使用TCP协议Q客L侦听Q服务端q接 q就是所谓的反向q接技术了。ؓ了克服服务端在某一端口上侦听易被发现这一~点Q现在服务端不再侦听端口Q而是去连接客L在侦听的某一端口。这L一般的port scanner或者fport很发现不了服务端了。而ؓ了更好的ȝ宿主机,客户端侦听的端口一般是21,80,23q种M人都要访问的端口。虽然在安装了防火墙的机器上Q服务端去连接客Lq是要引起防火墙报警Q但是一个粗心的用户很可能会忽略“应用程序xxxxx试图讉Kxxx.xxx.xxx.xxx通过端口80”这L警告?/p> q种反向q接技术要解决的一个问题是Q服务端如何扑ֈ客户端。由于一般客L都是拨号上网的,没有一个固定的IPQ所以客LIP不可能硬~码在服务端E序中。当然由于拨号上|用LIP一般都是处于一个固定的IP地址范围内,服务端也可以扫描q个范围Q然后根据被扫描L的反馈来定是否是自q客户端,但是服务端扫描一个IP地址范围也太……另一个方法是客户端通过一个有固定IP或者固定域名的W三方发布自qIPQ实现的Ҏ很多了Q比如通过一个公q邮箱Q通过一个个Z,q你有多大的想象力的?/p> 3.使用UDP协议Q服务端侦听Q客Lq接;客户端侦听,服务端连?/strong> Ҏ和安全性与使用TCP协议差不多。需要注意的是UDP不是一个可靠的协议Q所以,必须在UDP协议的基上设计一个自q可靠的报文传递协议?/p> 4.解决防火墙问题,无论是服务端被动侦听Q还是服务端dq接Q在服务端和客户端试囑־立连接时都会引v防火墙得报警 毕竟_心得用户不会很多,所以,解决防火墙报警是服务端必要解决的一个问题。一U方法是代码注入Q服务端自己注入到一个可以合法的与外界进行网l通讯的进E?比如 IE, ICQ, OICQ, TELNTED, FTPD, IIS{?的地址I间中,然后或者可以以一个新U程的Ş式运行,或者只是修改宿主进E,截获宿主q程的网l系l调?WinSock)。后者的实现可能要麻烦一些。如果是以新U程的Ş式运行,那么然后或者可以被动侦听,或者可以主动连接?/p> 无论哪种情况都不会引起防火墙的报?当然不是癑ֈ之百不会引v防火墙报?。但要注意的是如果是被动侦听的话Q比如寄生在IE内,用fport会发现IE在某一个端口侦听,q有可能会引L心的用户的警觉。所以比较好得方法是在新U程内去dq接客户端,而且q的是客L?0端口;如果是寄生在OICQ内,何不q接客户端的8000端口。用代码注入需要服务端h若干ҎQ考虑C般用户都是以Adminw䆾启动NT的,q应该不是一个问?如果服务端是作ؓ一个service启动的话Q就更没问题??/p> 5.再讨Z下服务端dq接时客LIP的公布问?/strong> 使用W三方公布客LIP不是一U可靠的Ҏ。比如如果是通过一个个Z发布客LIP的话Q一旦由于种U原因,q个个h主页被主|供商取消的话Q服务端找不到客户端了。而这U个Z被主页提供商取消的可能性是很大的。同时客L也要冒暴露自qIP的风险。所以更好的Ҏ是客L通过某种Ҏd告诉服务端自qIP和端口,然后服务端来q接。这样可以保证最大的可靠性,安全性和灉|性?/p> 服务端怎么收到客户端的通知?一U方法是我们截获其他q程收到的TCP数据或者UDP包,然后分析截获的数据,从中定是否客户端发来了一个报告其IP的数据片断。另一U方法是使用RAW socket来收听ECHO REPLYcd的ICMP包,在ICMP数据包的数据d包含了客LIP。而对于普通用h_׃要上|浏览,q样的ICMP包是很少qo掉的?/p> 6.用ICMP来通讯 既然客户端可以通过发一个ICMP(ECHO REPLY)来告诉服务端它的IPQ那Z么不把所有服务端和客L的通讯都徏立在ICMP的基上呢?服务端向客户端发ICMP(ECHO REQUEST)Q客L向服务端发ICMP(ECHO REPLY)Q然后可以在ICMP基础上徏立一个自q可靠数据报通讯协议。如果不怕烦的话Q还可以建立一个TCP over ICMP。由于一般的用户q两cICMP包都是设为无警告放行的,q种Ҏ的隐U性还是很强的?/p> 7. 用自定义的协议来通讯 我们知道IP头的协议字段指定了这个IP包承载得数据的协议,比如TCP,UDP,ICMP{等。我们完全可以把q个字段设ؓ我们自己定义的???80)Q定义自q通讯协议。不q估计这UIP包将会被所有的防火墙过滤掉?/p> 8.关于服务器上的木马的通讯隐藏 前面所说都是针对个人用?大部分都是拨LP包括Modem,ISDN,ADSL,FTTX+LA,Cable Modem)。对q类机器来说Q一般都没有开什么服务,而且一般都使用了个人防火墙Q同时ICMP ECHO REPLY/REQUEST都是放行的,所有才有我们上q的各种Ҏ。而对于服务器来说Q至要开HTTP服务Q同Ӟ又一般位于专门的防火墙之后。这个专门的防火墙很可能qo掉除cd为TCPQ且目的端口?0的IP包之外的所有的IP包,更不要说各类ICMP包了。向下的Ҏ通不q,我们可以试试向上的方案。一U方法就是注到IIS服务的进E空间中Q然后在IIS接受到木马客L的请求前来个预处理,在IIS数据发l木马客L时来个后处理Q不q我不知道怎么实现Q不知哪为高手知道?/p> 另一U方法就是写一个ISAPI APQ这P木马客户端发?http://xxx.xxx.xxx.xxx/backdoor.dll?cmd=dir+c: h来发命o了。当Ӟ一切信息都是加密得。RPC除了RPC over SMB,RPC over TCP{等外,q有一个RPC over HTTPQ事实上QQ的http代理是他自己定义的一个rpc over httpQ至QQ自己是这么叫的。现在,我们也来了个rpc over http?/p> 通讯隐藏技术只是木马隐藏诸技术中得一部分Q但也是最重要的一部分。因Z不但要保护木马,q要保护木马得控制者,所以不是木马~写者,q是防火墙编写者,都应该对q一部分l于_的重视?/p> |
讲解Q?/p>
Gauss 消去法是方E组AXQb,通过消元转化Z三角方程l(3Q?Q?Q求解,消元W一步做完后?br />
用矩阵表C?img height="27" src="http://mclab.sysu.edu.cn/na/text/chap3/images/647.gif" width="341" align="absMiddle" />
WKQ?步完成后得到
?img height="23" src="http://mclab.sysu.edu.cn/na/text/chap3/images/649.gif" width="44" align="absMiddle" />Q可做K步,得到
得到Q对应的方程l就是(3.2.1Q,利用公式Q?.2.4Q就可求得解?br /> 定理2.2l出了进行顺序消L的条Ӟ即A的所有顺序生子式
Q而方E(3.1.1Q解存在唯一的条件是
好了Q原理讲完了Q脓我的例程?br />