首页
学习
活动
专区
圈层
工具
发布

PE格式第八讲,TLS表(线程局部存储)

其实很简单,介绍一下TLS的API 总共4个 ?...的使用 1.首先是TlsAlloc的使用 DWORD TlsAlloc(VOID); 函数原型 调用一次TlsAlloc则会分配4个字节的空间, 不管你在哪里调用,如果在main里面(主线程)中调用,...那么当你创建线程的时候 线程会默认有4个字节的控件 返回值是一个索引, 这个索引是查FS寄存器数组的值当然,这个一会讲解.只需要知道,当我们为每一个线程申请了4个字节的空间 那么索引是一样的,但是索引操作的数据是不一样的...动态使用就是PE中不建立TLS表格了,同样完成同步 image.png 首先,我们为每个线程开辟了4个字节的空间 然后返回一个索引(这个索引看做是g_dwNumber,其实这个索引是去数组里面去取出成员来...注意,虽然回调我们写了,但是要让操作系统调用,那么我们需要添加一个特定的节.

1.7K80

虚实穿梭:用C++多态解锁代码的“平行宇宙”(2)

,一看计算结构体的大小(类的内存对齐和结构体是一样的),此时一看32位的环境,默认对齐的字节为4字节,并且一个整型一个字符型,4+1==5,此时经过内存对齐以后,自然而然的就是8字节,所以高高兴兴的选了一个...,所以这个指针大小是四字节,4+4+1 == 9,经过内存对齐以后,此时这个对象的大小就是12字节~这也算是一个小小的坑,这个指针我们通过debug以后才可以发现,如下图所示:         在C++...此指针指向该类对应的虚函数表(vtable)——一个由编译器生成的静态数组,其中按声明顺序存储了该类所有虚函数的实际地址。...2.派生类是由两部分构成的,继承下来的基类和自己的成员,一般情况下,继承下来的基类中有虚函数表指针【上图就是】,自己就不会再生成虚函数表指针。...其实我是悄咪咪的用了一个宏函数把函数的名字改成了中文~         5.虚函数表本质是一个存虚函数指针的指针数组,一般情况这个数组最后面放了一个0x00000000标记。

21000
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PHP高效对接车辆出险查询API:源码解析、加密实现与实战应用

    二、API接口调用示例(PHP版)本节演示如何在PHP环境中(支持PHP7.x/8.x)完成接口对接。我们将使用PHP标准库中的curl组件和openssl扩展,无需安装复杂的依赖包。...>三、核心数据结构解析PHP的数组处理能力极强,API返回的JSON解码后即为关联数组(AssociativeArray),可以直接在模板引擎(如Smarty、Blade)或原生PHP页面中遍历渲染。...用户发送车架号,PHP后端调用API,将retdata中的核心信息(如:无事故、维修金额3000元)打包成图文消息返回,实现“秒级查车”。...独立查询站群(SEO):利用PHP的动态生成能力,根据API返回的brandName和vehicleStyle批量生成长尾关键词页面(如“2018款宝马3系维修记录查询”),结合API的实时数据,构建高权重的垂直查询站点...通过本文的PHP代码示例,您可以快速打通数据的加密传输与解密展示环节。建议开发者在实际业务中,结合Redis缓存查询结果(以VIN码为Key),既能提升用户体验,又能有效降低API重复调用成本。

    12510

    零基础学AI大模型之LangChain六大核心模块与大模型IO交互链路

    通俗解释:就像Spring Batch的“读→处理→写”流程,Chain把“填充Prompt→调用Models→返回结果”串成一个流程,你只需要调用run()即可。...执行复杂任务(Agents会自己判断要不要调用工具) result = agent.run("请计算:Java中int类型占4个字节,一个int数组有10个元素,这个数组总共占多少字节?")...print(result) # 思考过程示例:我需要计算数组总字节数,int占4字节,10个元素就是4*10,应该调用Calculator工具; # 输出示例:Java中int类型占4个字节,10个元素的...int数组总字节数为4*10=40字节,因此该数组总共占40字节。...输出结果:把Models生成的解释返回给用户,完成一次IO交互。

    30910

    Android BlueToothBLE入门(三)——数据的分包发送和接收(源码已更新)

    上面可以看到,1-2字节是代表总包数,3-4字节是当前包数,5-512字节是当前包的数据。...其实这里主要要说为什么是前4个字节来记录总包数和当前包,1个byte的数字范围是-128到127,总共就256个数字存储,考虑到每个包最大512字节,如果数据量特别大,拆分的包数大于256就有问题了,而正常的...中再加入分写发送的函数,每个包发送完后间隔50毫秒 接收再组装数据 还是BlueToothBLEUtil中,首先定义了一个HashTable,根据通讯的设备地址为key生成数组。...接收的当前包数据先调用前面写的函数获取到总包数,当前包数和当前包的数据,根据总包数定义总包数的数组,如果hashtable里面有直接获取到后更新对应的当前包数据,因为发送时是按顺序发送的,所以在接收的时候判断当前包数...当接收完后从hashtable中获取到Array数组,然后将数组组合成一个ByteArray返回,并且在hasttable中删除即可。

    4.2K10

    JavaScript入门总结——第三弹 数组大放送

    [0] = 'rabbit4'; Option:不同于自然语言,[0]代表的才是第一个元素哦 数组的属性和方法 属性: 数组长度:var size = rabbitFamily.length 获取值的索引...concat():创建并返回一个数组,将concat的参数附加到调用该函数的数组之后 slice():返回指定数组的一个片段 splice():插入或删除数组元素 push():将新元素附加到原数组的尾部...,返回数组长度 pop():删除数组最后一个元素,返回删除值 unshift():将一个或多个元素添加到数组的头部,返回数组的新长度 shift():删除并返回数组的第一个元素 toString():将数组的每个元素都转化成一个字符串...它将调用每个元素的toLocaleString()方法把数组元素转换成字符串,然后把生成的字符串用局部特定的分隔符字符串连接起来。 ?...上面就是所有方法的demo啦~~ 好了,今天的数组专题就暂时结束了,也暂时想不起来其他啦,再次祝大家元宵节快乐,喜欢兔妞的文章请右下角点击好看呦~~

    45020

    rpc、Process、Module、Memory使用方法及示例

    ,返回模块对象的数组。...Process.enumerateModules()会枚举当前所有已加载的so模块,并且返回了数组Module对象,Module对象下一节我们来详细说,在这里我们暂时只使用Module对象的name属性...api,调用了Process.enumerateModules()方法之后会返回一个数组,数组中存储N个叫Module的对象,既然已经知道返回了的是一个数组,很简单我们就来for循环它便是,这里我使用下标的方式调用了...,返回Module数组对象 3 enumerateExports() 枚举所有Export库函数,返回Module数组对象 4 enumerateSymbols() 枚举所有Symbol库函数,返回Module...地址开始的10个字节 那肯定会是7F 45 4C 46...因为一个ELF文件的Magic属性如此。

    1.5K00

    兆易创新嵌入式软件工程师笔试题目解析

    fork调用的一个奇妙之处在于它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值: 1、在父进程中,fork返回新创建子进程的进程ID。 2、在子进程中,fork返回0。...很明显fork() && fork() || fork()创建了4个新进程。 总结: 第一行fork生成1个新进程。 第二行的三个fork生成4+4=8个新进程。...第三行的fork会生成10个新进程(这是因为前面总共有10个进程,调用一次fork生成10个新进程。 所以一共会生成1+8+10=19个新进程。 3.如果下列公式成立:3A*124=446C。...4.下面关于字符数组的初始化,那个是正确的?...4.运行char name[] = "/dev/spdev"后,系统会分配几块内存,这些内存共占多少个字节? 11字节。 字符串最后以\0结尾,共占据11字节。

    91930

    Android NDK开发入门

    我们可以像调用Java API Framework层一样直接调用系统的App。 接下来我们看一下如何编写Android JNI ,以及需要的流程。...4.2.2 异常处理 在使用GetStringUTFChars的时候,返回的值可能为NULL,这时需要处理一下,否则继续往下面走的话,使用这个字符串的时候会出现问题.因为调用这个方法时,是拷贝,JVM为新生成的字符串分配内存空间...如果有一个字符串的内容特别大,比如1M,且只需要读取里面的内容打印出来,此时比较适合用该对函数,可直接返回源字符串的指针。...整buff数组主要是拿来给生成出来的jintArray赋值的,因为jintArray是Java的数据结构,咱native不能直接操作,得调用SetIntArrayRegion函数,将buff数组的值复制到...然后调用SetObjectArrayElement函数设置jobjectArray数组中某个索引处的数据,这里将生成的jintArray设置进去。

    2.4K50

    面试大全 | C语言高级部分总结

    8字节对齐(8的整数倍) (3)猜测4字节/8字节其实是针对int型/double型的,比如0地址是char型,那么4字节对齐,int型、float型就必须从4地址开始存放,那么8字节对齐,int型就必须从...(不建议使用) 如:s1占5个字节,s2占8字节(默认) #pragma pack(1) struct stu1 { (结构体本身以及变量) 对齐规则:2字节对齐(2的整数倍),只要是0、2、4地址就行了...库函数实质还是用的API,或者调用了一个API,也或者调用了更多的API,只不过是做了更多的优化。...二重指针等同于指针数组。 不管是主函数还是功能函数,它都应该有一个返回值,而主函数的返回值是给调用的那个人的/main函数从某种角度来讲代表了我当前这个程序,或者说代表了整个程序。...总之一句话:一个程序被它的父进程所调用。 结论:main函数返回给调用这个函数的父进程。父进程要这个返回值干嘛?

    2.3K10

    HeyGen 开放 API:轻松创建数字人、视频翻译与互动

    应用: 营销视频:制作虚拟化身引导的产品推广视频。 产品演示:生成动态产品演示,帮助用户更好理解产品功能。 个性化视频:为不同客户定制专属的视频内容,增强客户参与感。 2....4. 视频生成与互动的组合 API 功能:结合视频生成与互动数字人,创建互动式产品介绍或营销视频。用户可在观看时直接与数字人互动,获取更多个性化信息。...如何使用这些 API: 视频生成 API:通过调用该 API 输入数字人的设定(角色、场景、台词等),生成个性化的高质量视频。...视频翻译 API:将已有视频内容通过该 API 转换为多个语言版本,并确保语言与口型同步。 互动虚拟化身 API:将数字人嵌入到您的应用或网站,用户可与虚拟角色进行实时互动。...查看文档和集成指南:HeyGen 提供详细的开发者文档,帮助快速上手。 试用和定制:在免费试用期内,体验虚拟化身生成、视频翻译和互动功能。

    1.4K10

    用Qt写软件系列一:QCacheViewer(浏览器缓存查看器)

    寻寻觅觅良久之后,终于发现了两种实现方式:(1)调用windows系统提供的API。这些API使用简单,只需要循环调用即可获取Cache信息。...我们将在方法二中详细剖析index.dat的结构。 方法一、调用系统API  1....其返回一个句柄,该句柄用于所有后续的FindNextUrlCacheEntry()调用。FindCloseUrlCache()函数用户关闭句柄,结束枚举过程。...每个hash section都有一个头部,占16个字节。其定义如下: ? hash头部的dwSig字段占4字节,是由“HASH”这个四个字母的ASCII码填充的。...紧随头部的便是hash itmes了。一个hash item占8字节,前4字节是哈希值,后4字节是Cache记录在index.dat文件中的偏移,也是以index.dat文件的起始地址为基准。 2.

    1.5K50

    PE格式:新建节并插入代码

    首先我们的目标是新建一个新节区,我们需要根据.text节的内容进行仿写,先来看区段的书写规则: 上图中:一般情况下区段的总长度不可大于40个字节,其中2E标志着PE区段的开始位置,后面紧随其后的7个字节的区域为区段的名称...,由于只有7个字节的存储空间故最多只能使用6个字符来命名,而第一处蓝色部分则为该节在内存中展开的虚拟大小,第二处蓝色部分为在文件中的实际大小,第一处绿色部分为该节在内存中的虚拟偏移,第二处绿色部分为文件偏移...为了保证生成的ShellCode可用性,你可以通过将生成的ShellCode加入到测试程序中测试调用效果,此处我就不测试了,直接贴出测试代码吧,你只需要将buf[]数组填充为上方的Shell代码即可。...于是乎我打开了微软的网站,查询了一下相关API函数,最终找到了一个CreateThread()函数可以在进程中创建线程,此处贴出微软对该函数的定义以及对函数参数的解释。...=> 此处是传递给线程函数的参数,我们这里直接填NULL dwCreationFlags => 为0表示线程创建之后立即就可以进行调度 lpThreadId => 返回线程的ID号,传入NULL表示不需要返回该线程

    54110

    PE格式:新建节并插入代码

    首先我们的目标是新建一个新节区,我们需要根据.text节的内容进行仿写,先来看区段的书写规则:图片上图中:一般情况下区段的总长度不可大于40个字节,其中2E标志着PE区段的开始位置,后面紧随其后的7个字节的区域为区段的名称...,由于只有7个字节的存储空间故最多只能使用6个字符来命名,而第一处蓝色部分则为该节在内存中展开的虚拟大小,第二处蓝色部分为在文件中的实际大小,第一处绿色部分为该节在内存中的虚拟偏移,第二处绿色部分为文件偏移...为了保证生成的ShellCode可用性,你可以通过将生成的ShellCode加入到测试程序中测试调用效果,此处我就不测试了,直接贴出测试代码吧,你只需要将buf[]数组填充为上方的Shell代码即可。...于是乎我打开了微软的网站,查询了一下相关API函数,最终找到了一个CreateThread()函数可以在进程中创建线程,此处贴出微软对该函数的定义以及对函数参数的解释。...=> 此处是传递给线程函数的参数,我们这里直接填NULLdwCreationFlags => 为0表示线程创建之后立即就可以进行调度lpThreadId => 返回线程的ID号,传入NULL表示不需要返回该线程

    59500

    接口测试平台代码实现51: 自动异常测试-4

    我们遍历这个字典的key,然后依次进行替换,仍然是俩层大循环: 代码如下: 来看下效果: 果然都进行了替换。...(api_body); if(s instanceof Array){ console.log('这是数组'); for(var i=0;...} } } 本节的最后,给大家看一个bug: 就是当我们把请求体变成如下这种带回车的情况时,那么点击异常值测试就会报错,甚至打不开弹层: 这种原因是因为我们在调用这个函数的时候,这个按钮的传参数位置因为有了回车...那么我们显然在一开始的时候没考虑到这种情况,只是简单的想当然的我们需要这个接口请求体,就传进来的思维。 所以下节课会给大家公布一些解决方案和具体代码。小伙伴也可以自己想想办法,看看怎么解决?...欢迎回复: 下节课会讲,把这些替换好的请求体发给后台,让后台去生成请求,并返回返回值,然后前端动态生成各个显示文本框。

    56020

    ESPcopter无人机源码分析.1

    目前只能调用一次。 返回值:无 到现在完成了引脚的PWM初始化 PWM的频率 对于PWM的初始化以外,就是pwm的启动了。...主要原因是flash是以sector为一个单位,1 sector等于4096Bytes(4KB),操作flash时是以sector为一个整体来操作 读取操作是通过ESP8266 SDK提供的API将flash...flash中读取相应数据到内存 size:要申请的内存大小(size取值范围为4~4096字节) 返回值:无 注意点:size必须大于0 虽然我们可以输入自定义size,但是最终会经过计算得到真正的size...返回值:无 注意点:写入的数据只是写入到申请的内存空间,并不是立刻写入到flash中 EEPROM其实是从外部flash中存储器最末尾开辟的4096字节空间 【write只写一个字节的数据,所以数据的值应该在...注意点:读取的数据也是从begin中生成的内存空间中去获取,并不会直接操作flash 【read只读一个字节的数据】 函数:commit() 该功能用于把内存空间的数据覆盖到flash eeprom

    1K20
    领券