edx

Delphi常用关键字用法详解

亡梦爱人 提交于 2020-05-08 21:16:32
absolute: // 它使得你能够创建一个新变量, 并且该变量的起始地址与另一个变量相同. var Str: string [ 32 ]; StrLen: Byte absoluteStr; // 这个声明指定了变量StrLen起始地址与Str相同. // 由于字符串的第0个位置保存了字符串的长度, 所以StrLen的值即字符串长度. begin Str : = ' abc ' ; Edit1.Text : = IntToStr(StrLen); end ; abstract: // 它允许你创建抽象的方法, 包括有抽象方法的类称为抽象类. // Abstract关键字必须与Virtual或Dynamic关键字同时使用, 因为抽象方法必须被覆盖式实现. // 抽象类不能实例化, 抽象方法不能包含方法体. type TDemo = class private protected procedure X; virtual ; abstract ; public constructor Create ; destructor Destroy ; override ; published end ; and: // 一、表示逻辑与 if (a> 0 ) and (b> 0 ) then // 二、表示位运算 var a,b,c: Integer; begin c : = (a and

汇编语言 Part 2——寄存器

自古美人都是妖i 提交于 2020-05-08 00:26:10
处理器操作主要涉及处理数据。这些数据可以存储在内存中并从中访问。但是,读取数据并将其存储到内存中会减慢处理器的速度,因为它涉及将数据请求通过控制总线发送到内存存储单元并通过同一通道获取数据的复杂过程。 为了加快处理器操作速度,处理器包括了一些称为**寄存器 **(Registers) 的内部内存存储位置。 寄存器存储了用于处理的数据元素,而不必访问内存。处理器芯片中内置了数量有限的寄存器。 处理器寄存器 在 IA-32 体系结构中,有10个32位和6个16位处理器寄存器。寄存器分为三类—— 通用寄存器 (General registers), 控制寄存器 (Control registers),以及 段寄存器 (Segment registers)。 通用寄存器可进一步划分成—— 数据寄存器 (Data registers), 指针寄存器 (Pointer registers),以及 变址寄存器 (Index registers)。 数据寄存器 四个32位数据寄存器用于算术、逻辑和其他操作。这些32位寄存器可以用三种方式—— 完整的32位数据寄存器: EAX、EBX、ECX、EDX。 32位寄存器的下半部分可以用作4个16位数据寄存器: AX、BX、CX 和 DX。 上述4个16位寄存器的以上部分可用作8个8位数据寄存器: AH、AL、BH、BL、CH、CL、DH 和 DL。

《操作系统真象还原》线程

こ雲淡風輕ζ 提交于 2020-05-07 11:53:26
线程 简介   线程是什么?一般我们在书上看到的定义都是:线程是被操作系统调度的最小单位。这定义可能给出的意义并不多,我们在之后讲到为什么有线程之后,就会有一个比较清楚的理解。   先从线程建立的角度来说一下,线程是什么。 int pthread_create(pthread_t * __restrict __newthread, __const pthread_attr * __restrict __attr, void *(*__start_routine)( void * ), void *__restrict __arg) __THROW __nonnull (( 1 , 3 ));   这是Posix版本线程库中创建线程的定义。   __newthread用于存储线程的id。   __attr用于指定线程的类型。   __start_routine是函数指针,用于指定线程执行程序的入口地址。   __arg用于指定线程执行程序的参数,即__start_routine的参数。   再看看一个调用该函数的简单例子: #include <stdio.h> #include <pthread.h> void * thread_func( void * _arg) { unsigned int *arg = _arg; printf( " new thread: my tid is

stdcall cdecl fastcall thiscall nakedcall Calling Conventions

我怕爱的太早我们不能终老 提交于 2020-05-06 21:08:17
stdcall cdecl fastcall thiscall nakedcall Calling Conventions 有一定C++开发经验的人一定对”__cdecl、__stdcall、__fastcall”肯定不陌生吧!但你真正理解了吗?是的,我曾在这采了无数个坑,栽了无数个跟头,终于忍无可忍要把它总结一下(虽然我已经有能力解决大部分这种问题了)! 什么是调用约定 函数的调用约定,顾名思义就是对函数调用的一个约束和规定(规范),描述了函数参数是怎么传递和由谁清除堆栈的。它决定以下内容:(1)函数参数的压栈顺序,(2)由调用者还是被调用者把参数弹出栈,(3)以及产生函数修饰名的方法。 我们知道函数由以下几部分构成:返回值类型 函数名(参数列表),如: 【code1】 void function(); int add(int a, int b); 1 2 以上是大家所熟知的构成部分,其实函数的构成还有一部分,那就是调用约定。如下: 【code2】 void __cdecl function(); int __stdcall add(int a, int b); 1 2 上面的__cdecl和__stdcall就是调用约定,其中__cdecl是C和C++默认的调用约定,所以通常我们的代码都如 【code1】中那样定义,编译器默认会为我们使用__cdecl调用约定。常见的调用约定有

跟踪分析Linux内核5.0系统调用select处理过程

冷暖自知 提交于 2020-05-03 21:47:13
跟踪分析Linux内核5.0系统调用select处理过程 学号:282 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境来使应用程序具有更好的兼容性,为了达到这个目的,内核提供一系列具备预定功能的多内核函数,通过一组称为 系统调用 (system call)的接口呈现给用户。 系统调用 把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序。 一、实验目的 基于Linux5.0.1内核和孟宁老师的MenuOS,追踪系统调用的过程。 二、实验步骤 环境搭建 编译5.0.1内核 # 解压 mkdir ~/LinuxKernel tar -xv -f ~/Download/linux-5.0.1.tar.xz -C ~/LinuxKernel # 配置编译 cd ~/LinuxKernel/linux-5.0.1 make menuconfig # 基于文本选单的配置界面 通过方向键,选择 kernel hacking-->Compile-time checks and compiler options-->compile the kernel with debug info Save保存后退出。 # 编译 make #

常用网站

烈酒焚心 提交于 2020-05-02 16:51:41
搜索引擎 中国知网 虫部落·快搜 SCI-HUB 鸠摩搜索 多吉搜索 Qwant Lookao 秘迹搜索 联合搜索 万千集合站 茶杯狐 iData 北邮人导航 正版中国 SearchEncrypt Ecosia LibreStock SemanticScholar WikiHow Github 代码社区 Gitlab 码云 InfoQ Ubuntu中文论坛 ZELAER inoreader 远景论坛 36氪 卡饭论坛 V2EX Google Hacking Database 安天实验室 Sec-News 安全圈 二十次幂 先知社区 Freebuf 安全客 在线课堂 学堂在线 edX Coursera 爱课程 中国大学MOOC 网易云课堂 合天网安实验室 网易公开课 Khan Academy 传智播客 Lynda 安全牛课堂 蓝鲸安全 bilibili 漏洞银行 SmashingMagazine 服务工具 清华大学TUNA协会 中国科学技术大学Linux用户协会 阿里云开源镜像站 carbon Free Online Barcode Reader CTF在线工具 somod5 草料二维码 在线工具 Free Online IDE and Terminal JavaScript 3d Library HTML颜色代码 PanDownload网页版 Cmd Marddown 与佛论禅

Delphi、Lazarus保留字、关键字详解

本小妞迷上赌 提交于 2020-04-29 13:29:49
来自橙子,万一的博客以及其他地方 保留字:变量等标识符可以再使用; 关键字:有特定含义,不能再次重新定义; 修饰字:类似保留字的功能,也就是说可以重用 ; 数据类型:数据类型类似保留字,一般也不要重新定义; 提示字:这个信息是用在编译时提示用户平台依赖等用途的,也不要改变。 但是保留字还是尽量不要重新定义,比如下面的代码 procedure TForm1.FormCreate(Sender: TObject); var true:string; begin end; 可以正确执行。 同样标识符也类似于保留字,如下的程序也可以执行: type Integer= Char; var I: Integer; begin I:= 'A'; ShowMessage(I);end; 但是下面的程序就会报告错误了。 type string = Integer; 所以无论保留字、标识符、关键字、修饰字都最好不要重新定义; Turbo pascal 保留字 and array asm begin break case const constructor continue destructor div do downto else end false file for function goto if implementation in inline interface label mod nil

Windows异常分发函数---KiUserExceptionDispatcher

有些话、适合烂在心里 提交于 2020-04-26 06:32:09
简介 KiUserExceptionDispatcher 是SEH分发器的用户模式的负责函数。当一个异常发生的时候,该异常将生成一个异常事件,内核检查该异常是否是由于执行用户模式代码导致的。如果是这样的话,内核修改栈上的trap frame,因此当内核从中断或者异常返回的时候,线程将从KiUserExceptionDispatcher 函数执行而不是导致异常的指令。内核将另外安排几个参数(一个 PCONTEXT 和一个 PEXCEPTION_RECORD),它们描述了异常发生时机器的状态,而且在线程返回到用户模式之前被传递给KiUserExceptionDispatcher 函数。 一旦内核模式栈展开,而且指令转移到用户模式的KiUserExceptionDispatcher 函数,该函数通过调用一个本地的函数RtlDispatchException来处理异常,RtlDispatchException是用户模式异常处理逻辑中的核心函数。如果异常被成功分发的话(也就是SHE 链表中有一个函数宣称可以处理该异常), RtlDispatchException调用RtlRestoreContext 函数实现最终的用户模式上下文的设置,该函数只是加载给定的上下文中的寄存器到到处理器的体系结构执行状态中。 否则,通过调用 NtRaiseException 函数,异常重新被提交到内核模式

SharePoint 集成PowerApps和Flow教程(一,搭建PowerApps 环境)

|▌冷眼眸甩不掉的悲伤 提交于 2020-04-06 14:44:37
SharePoint 集成PowerAppa和Flow教程(一,搭建PowerApps 环境) 通过Office 365 E3,您可以访问Office产品的最新安装以及PowerApps和Flow等集成协作服务。 在Office 365网站上注册Office 365 E3试用版:https://aka.ms/edx-dat227x-o365 输入所有必需信息,然后单击 下一步 。 输入用户名,公司名称和密码,然后单击“ 创建我的帐户” 。 继续验证并单击“ 下一步” 。 完成注册过程后,您将看到一个名为 [yourname] 的新登录名。这将是您将用于PowerApps和Flow的登录名称。 单击 您已准备好去 或访问http://portal.office.com。 使用 [yourname] 和您的密码登录。 就是这样 - 您现在已登录。您可以查看Office 365 E3订阅中包含的可用服务。如果这是您第一次在注册后登录,您将看到仍在设置某些服务。请注意,PowerApps和Flow可立即使用。 注册PowerApps 您将需要PowerApps Plan 2来创建新环境。退出并关闭所有broswers。 转到https://powerapps.microsoft.com/en-us/pricing/ 在PowerApps Plan 2下,单击 免费试用。

C ++ string ==和compare()之间的区别?

牧云@^-^@ 提交于 2020-03-15 21:51:53
我刚读了一些关于使用的建议 std::string s = get_string(); std::string t = another_string(); if( !s.compare(t) ) { 代替 if( s == t ) { 我几乎总是使用最后一个,因为我已经习惯了它,它感觉自然,更具可读性。 我甚至不知道有一个单独的比较功能。 更确切地说,我认为==会调用compare()。 有什么区别? 在哪种情况下,一种方式应该受到另一种方式的青睐? 我只考虑我需要知道字符串是否与另一个字符串相同的情况。 #1楼 这里没有涉及的一件事是,它取决于我们将字符串与c字符串,c字符串与字符串或字符串与字符串进行比较。 一个主要的区别是,为了比较两个字符串,在进行比较之前检查大小相等,这使得==运算符比比较更快。 这是我在g ++ Debian 7上看到的比较 // operator == /** * @brief Test equivalence of two strings. * @param __lhs First string. * @param __rhs Second string. * @return True if @a __lhs.compare(@a __rhs) == 0. False otherwise. */ template<typename _CharT,