函数调用

C++笔记(3):一些C++的基础知识点

99封情书 提交于 2020-02-26 23:05:08
前言: 找工作需要,最近看了下一些C++的基本概念,为范磊的 《零起点学通C++》,以下是一些笔记。 内容:   delete p;只是删除指针p指向内存区,并不是删除指针p,所以p还是可以用的。删除空指针所指向内存是可以的。   堆中的变量和对象时匿名的,没有名称,只能通过指针来访问。   在堆中创建对象时,在分配内存的同时会调用类的构造函数,在删除堆中对象时,会调用类的析构函数。   为了避免内存泄露,在删除一个指针后应该将其其值赋为0。   常量指针是指针指向的内存区域地址不能改变,但是该内存地址里保存的值是可以改变的,比如int a; int * const p = &a;   指向常量的指针表示指针指向的对象是不能被修改的,但是该指针可以被修改,即该指针可以指向另一块目标内存地址。比如const int a = 0; const int *p = &a; 如果A是一个类,也可以为const A* p = new A;   而指向常量的常指针表示指针本身不能被修改,其指向的内存地址内容也不能被修改。比如const int a = 0; const int * const p = &a;   引用就是别名常量。   堆中的地址是用指针来操作的,用不到别名。   如果在main函数前面的其它函数的声明和定义是一起的,则表明这个函数是内联函数!因此当该函数较长时

Dll注入:Windows消息钩子注入

北城余情 提交于 2020-02-26 23:01:48
SetWindowsHook() 是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。 钩子机制允许应用程序截获处理window消息或特定事件。 HHOOK WINAPI SetWindowsHookEx( __in int idHook, \\钩子类型 __in HOOKPROC lpfn, \\回调函数地址 __in HINSTANCE hMod, \\实例句柄 __in DWORD dwThreadId); \\线程ID 使用API函数SetWindowsHookEx()把一个应用程序定义的钩子子程安装到钩子 链表 中。 SetWindowsHookEx函数总是在Hook链的开头安装Hook子程。当指定类型的Hook监视的事件发生时,系统就调用与这个Hook关联的 Hook链的开头的Hook子程。每一个Hook链中的Hook子程都决定是否把这个事件传递到下一个Hook子程。Hook子程传递事件到下一个 Hook子程需要调用CallNextHookEx函数。 系统钩子 SetWindowsHookEx()函数的最后一个参数决定了此钩子是 系统钩子 还是线程钩子。 线程钩子 线程勾子用于监视指定线程的事件消息。线程勾子一般在当前线程或者当前线程派生的线程内。

关于函数调用的基础知识

China☆狼群 提交于 2020-02-26 22:23:24
关于函数调用我想说,很多函数都是需要相应的头文件,例如pow函数就需要调用头文件math.h,pow的用法是计算一个双浮点型数的n次方,例如要计算3的立方则可以表示为pow(3,3)。此处需要注意的是,pow函数所计算的数字必须是双浮点型的,在定义数时应注意类型为double,又例函数system(“pause”),它的作用是让系统来暂停程序的进程,这是一个系统命令,调用系统命令时应使用头文件stdlib.h,即standard library标准库头文件。在以后的码代码过程中还会遇到很多的奇妙的函数,可以使用MSDN这样的软件去查询使用。 来源: 51CTO 作者: wx5cb188ffabeef 链接: https://blog.51cto.com/14289397/2382030

面向对象

大兔子大兔子 提交于 2020-02-26 21:02:40
面向对象三大特征 封装 多态 继承 类 对象 单继承 super 类的约束 异常处理 类的私有成员 属性 反射 isinstance和issubclass type 双下方法 面向对象(类)三大特征 封装 指函数,模块,类,对象等,将一些数据或者内容封装到一个空间 , 可以调用 多态 指一种事物多种形态 python 默认支持多态(变量可以指向任意数据类型) 同⼀个变量a可以是多种形态。鸭子类型 :两个类中有相同的方法 , 继承 指子类(子类的对象)可以调用父类(基类)的属性与方法 鸭子类型:看着像鸭子就是鸭子.,A,B完全没有耦合性,但是某种意义上形成了一种标准. 类 优点: 1,类是相似功能的集合体,组织结构更清晰 2,拥有上帝的思维,制作一个公共模板. 从类名的角度分析: 1, 类名查看类中所有的属性 Human.__dict__ 2, 类名操作单独属性. 万能的. 查:Human.mind 增:Human.emotion = '有情感' 改: Human.mind = '无脑' 删:del Human.mind 类名调用方法(不推荐使用). __init__里面不能有return 对象 : 类名+()就是实例化对象 三步: a,在内存中开辟一个对象空间. b,自动执行__init__方法,将对象空间传给self c,执行__init__方法,给对象空间封装属性. 对象

3 汇编的函数调用

浪尽此生 提交于 2020-02-26 19:21:38
3 汇编的函数调用 3.1 无参数和返回值的函数调用 void func_void () { printf ( "func, no param, no return value \n " ); } // func_void(); asm ( "call func_void" ); // call指令调用函数,该函数为C命名风格,C++编译则需使用C++名称。 3.2 调用函数并获取返回值 int func_get_value () { int a = 11 ; int b = 12 ; return a + b ; } int a ; // a = func_get_value(); asm ( "call func_get_value \n\t " "mov %%eax, %0 \n\t " // 按照调用约定,EAX/RAX寄存器存放返回值。 : "=m" ( a ) ); printf ( "%d \n " , a ); // output: 23 3.3 调用参数数目在6个以内的函数 根据System V X86_64调用约定,6个以内(含)的参数,放入寄存器。 int func_add ( int a , int b ) { return a + b ; } int c = 0 ; // c = func_add(100 , 200); asm ( "mov $100,

[轉]sendpage漏洞分析 CVE-2009-2692

我的未来我决定 提交于 2020-02-26 19:20:24
之前看了《 新爆内核高危漏洞sock_sendpage的利用分析的讨论 》这篇帖子,在九贱兄和诸位CUer的指引下,大致弄清了整个漏洞的始末。现与大家分享(引用自 我的空间 )。 有什么不足之处还望多多指教~ 内核的BUG 这个BUG首先得从sendfile系统调用说起。 考虑将一个本地文件通过socket发送出去的问题。我们通常的做法是:打开文件fd和一个socket,然后循环地从文件fd中read数据,并将读取 的数据send到socket中。这样,每次读写我们都需要两次系统调用,并且数据会被从内核拷贝到用户空间(read),再从用户空间拷贝到内核 (send)。 而sendfile就将整个发送过程封装在一个系统调用中,避免了多次系统调用,避免了数据在内核空间和用户空间之间的大量拷贝。 ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count); 虽然这个系统调用接收in和out两个fd,但是有所限制,in只能是普通文件,out只能是socket(这个限制不知道后来的内核版本有没有放宽)。 sendfile系统调用在内核里面是怎么实现的呢?这个还是比较复杂,它在内核里面做了原来要在用户态做的事情:创建一个pipe对象作buffer用、从in_fd中读数据到pipe中、将pipe中的数据写到out_fd

JDK8的十大新特性介绍

随声附和 提交于 2020-02-26 19:15:47
JDK8十大新特性 1.Lambda表达式 2.新的日期API 3.引入Optional 4.使用Base64 5.接口的默认方法和静态方法 6.新增方法引用格式 7.新增Stream类 8.注解相关的改变 9.支持并行(parallel)数组 10.对并发类(Concurrency)的扩展。 一、Lambda表达式 Lambda 表达式也可称为闭包,是推动 Java 8 发布的最重要新特性。lambda表达式本质上是一个匿名方法。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)或者把代码看成数据。使用 Lambda 表达式可以使代码变的更加简洁紧凑。在最简单的形式中,一个lambda可以由:用逗号分隔的参数列表、–>符号、函数体三部分表示,在某些情况下lambda的函数体会更加复杂,这时可以把函数体放到在一对花括号中,就像在Java中定义普通函数一样。Lambda可以引用类的成员变量与局部变量(如果这些变量不是final的话,它们会被隐含的转为final,这样效率更高)。Lambda可能会返回一个值。返回值的类型也是由编译器推测出来的。如果lambda的函数体只有一行的话,那么没有必要显式使用return语句。 如何使现有的函数友好地支持lambda。最终采取的方法是:增加函数式接口的概念。函数式接口就是接口里面必须有且只有一个抽象方法的普通接口

6种JavaScript继承方式及优缺点

最后都变了- 提交于 2020-02-26 18:37:44
友情提示: 想要更好的理解JS继承方式,须了解构造函数、原型对象、实例化对象、原型链等概念 第一种:原型链继承 利用原型链的特点进行继承 function Parent(){ this.name = 'web前端'; this.type = ['JS','HTML','CSS']; } Parent.prototype.Say=function(){ console.log(this.name); } function Son(){}; Son.prototype = new Parent(); son1 = new Son(); son1.Say(); 以上例子解释: ①创建一个叫做Parent的构造函数,暂且称为父构造函数,里面有两个属性name、type ②通过Parent构造函数的属性(即原型对象)设置Say方法,此时,Parent有2个属性和1个方法 ③创建一个叫做Son的构造函数,暂且称为子构造函数 ④设置Son的属性(即原型对象)值为父构造函数Parent的实例对象,即子构造函数Son继承了父构造函数Parent,此时Son也有2个属性和1个方法 ⑤对Son构造函数进行实例化,结果赋值给变量son1,即son1为实例化对象,同样拥有2个属性和1个方法 ⑥输出son1的Say方法,结果为"web前端" 优点:可以实现继承 缺点: ①因为Son.prototype

python函数基础

与世无争的帅哥 提交于 2020-02-26 14:15:12
一,函数是什么?   函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。   函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。   函数定义:函数是指一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需要调用其函数名即可 函数特性: 代码重用 保持一致性 可扩展性 二,函数的创建 2.1格式:   python定义函数使用def关键字,一般格式如下: def 函数名(参数列表): 函数体   举个例子: def hello(): print("hello") hello() #调用 # 结果:hello 2.2函数名的命名规则: 函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标点符号; 函数名是区分大小写的。 函数名不能是保留字。 2.3形参和实参   形参 :形式参数,不是实际存在,是虚拟变量,在定义函数和函数体的时候使用形参

javascript 调用C++函数

柔情痞子 提交于 2020-02-26 12:41:56
分3步: 一》实现IDispatch 接口    #ifndef _IDISPIMP_H_ #define _IDISPIMP_H_ // idispimp.h class CImpIDispatch : public IDispatch { protected: ULONG m_cRef; public: CImpIDispatch(void); ~CImpIDispatch(void); STDMETHODIMP QueryInterface(REFIID, void **); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); //IDispatch STDMETHODIMP GetTypeInfoCount(UINT* pctinfo); STDMETHODIMP GetTypeInfo(/* [in] */ UINT iTInfo, /* [in] */ LCID lcid, /* [out] */ ITypeInfo** ppTInfo); STDMETHODIMP GetIDsOfNames( /* [in] */ REFIID riid, /* [size_is][in] */ LPOLESTR *rgszNames, /* [in] */ UINT cNames, /*