基本数据类型的内存大小都是固定的(采用静态内存分配),而引用数据类型的内存大小都是动态不固定的(采用动态内存分配),可能会随时发生变化。因此在内存分配阶段这两种数据类型会有一定的差异。静态内存分配和动态内存分配的区别如下表所示:静态内存分配动态内存分配编译阶段可确定大小编译阶段无法确定大小在编译时执行在运行时执行分配给堆栈分配给堆顺序分配,后进先出(LIFO)无序分配 JavaScrip
1,开发人员报错报错现象:ERROR:ORA-01034: ORACLE not availableORA-27101: shared memory realm does notexist进程 ID: 0会话 ID: 0 序列号: 0 2,原因分析大概是昨天做的配置修改引起的,因为原来将oracle数据库从idc机房迁移到azure云上,为了保持迁移的稳定性,在云上采用了和idc一样的配
#include <windows.h> int main() { DWORD dwKernel32 = 0; _asm { mov eax, fs:[0x30] // peb mov eax, [eax+0x0C] // ldr mov eax, [eax+0x1C] // Module List ...
转载 2021-10-31 16:33:00
665阅读
2评论
基本概念栈(stack):是栈内存的简称,栈是自动分配相对固定大小的内存空间,并由系统自动释放,栈数据结构遵循FILO(first in last out)先进后出的原则,较为经典的就是乒乓球盒结构,先放进去的乒乓球只能最后取出来; 堆(heap):是堆内存的简称,堆是动态分配内存内存大小不固定,也不会自动释放,堆数据结构是一种无序的树状结构,同时它还满足key-value键值对的存储
关于基址的一些暂时的模糊的答案: 为什么要有基址基址就是程序所有内存数据的0坐标,程序的所有数据都是基于基址+偏移得到自己的地址,所以说基址就是为了在计算机微观抽象的世界中找到重心与方向。 为什么基址不会变?因为程序必须设定程序的0坐标,才能开展内存数据工作。 筛选原则: 相同开头的不用考虑,小于
原创 2021-04-25 23:45:52
2265阅读
问题一:String str1 = "abc"; String str2 = "abc"; System.out.println(str1==str2); //true问题二:String str1 =new String ("abc"); String str2 =new String ("abc"); System.out.println(str1==str2); // false问题
很久不写关于技术的东西了,由于最近在研究内嵌汇编和机器码的注入,故把下面这段代码列出来。其中C/C++的部分和inline asm的最后一句是我写的。自评:极其缺乏原创精神。HMODULE GetKernel32( void ){ HMODULE hRet = NULL; __asm { mov eax, fs:30h mo
转载 2021-08-02 14:32:02
661阅读
在Linux系统中,偏移和基址内存管理中非常重要的概念。特别是在C语言编程中,了解内存偏移和基址可以帮助程序员更好地控制程序的内存布局和访问方式,提高程序的性能和安全性。 在C语言中,指针是一个非常重要的概念,它用来存储内存地址。程序中的变量和数组都存储在内存中的某个地址上,通过指针可以访问和操作这些数据。内存偏移就是指从某个基址开始,按照一定的偏移量访问内存地址。通过内存偏移,程序可以在内存
原创 2024-05-28 10:12:13
119阅读
如何在Python中获取进程的内存基址 ## 概述 本文将向刚入行的小白开发者介绍如何使用Python获取进程的内存基址。首先,我们将展示整个过程的流程图,然后逐步详细介绍每个步骤需要做什么,以及需要使用的代码。 ## 流程图 ```mermaid flowchart TD Start(开始) --> Step1(导入模块) Step1 --> Step2(获取进程ID)
原创 2024-01-07 05:32:53
641阅读
上篇文章讲解了如何操作FRIDA进行内存的读写,今天试试用objection来进行内存的读写。github地址:https://github.com/sensepost/objection继续以上篇文章的apk进行学习,请开启frida服务。通过objection命令启动apk进程:objection -g com.yaotong.crackme explore启动好的界面是这样的:提示我们输入命
转载 2023-08-15 23:01:40
741阅读
# Python如何获取本程序内存基址 在Python中,我们可以使用`ctypes`模块来获取本程序的内存基址内存基址是进程中所有数据的起始地址,通常在程序运行时是不变的。 下面将介绍如何使用`ctypes`模块来获取本程序的内存基址,并且给出一个具体的问题来解决。 ## 使用ctypes模块获取内存基址 `ctypes`是Python的一个外部库,它提供了与C语言兼容的数据类型和函数
原创 2023-07-22 16:56:57
1072阅读
一、内存(ram):android的总内存大小信息存放在系统的/proc/meminfo文件里面,可以通过读取这个文件来获取这些信息:Java代码1.public void getTotalMemory() { 2. String str1 = "/proc/meminfo"; 3. String str2=""; 4. try { 5.
2022-1-18 地址转换 动态重定位 分段 我们引用哪个段 栈 共享支持 空闲空间管理 底层机制 地址转换 动态重定位 对于程序而言,其地址转换过程的不存在的,程序认为自己的地址就是开始于0kb,结束于固定大小,这就是地址转换的透明性,对cpu而言,实现程序地址到真实物理地址的转换很简单,cpu有两个寄存器,基
转载 2024-03-19 00:01:22
150阅读
基址这个东西就是找一个偏移嘛。 这次用的程序是1.0原版的植物大战僵尸。 找了个简单点的数据就是阳光,直接搜2次就能找到这个int变量。 然后查对于这个地址的内存访问。 找到的里面有个偏移,再对之前计算的那个进行查找,然后查看内存访问,最后结果如下: 阳光 = [[基地址+0x768] + 556 ...
转载 2021-08-17 20:20:00
1060阅读
2评论
目录建立一个图邻接矩阵邻接表深度优先遍历(DFS)具体步骤:第一部分:给定结点u,遍历u所在的连通块的所有结点第二部分:对图G所有结点进行第一部分的操作,即遍历了图的所有连通分量伪代码邻接矩阵实现邻接表实现广度优先遍历(BFS)具体步骤第一部分:给定结点u,遍历u所在的连通块的所有结点第二部分:对图G所有结点进行第一部分的操作,即遍历了图的所有连通分量伪代码邻接矩阵实现邻接表实现DFS,BFS遍历
转载 2024-04-14 08:30:36
120阅读
1 #include <windows.h> 2 #include <stdio.h> 3 4 //内嵌汇编获取Kernel32的地址 5 __declspec(naked) DWORD getKernel32() 6 { 7 __asm 8 { 9 mov eax,fs:[30h] 10 mov ...
转载 2021-09-10 22:05:00
792阅读
2评论
思路:每个程序打开后他们的数据的内存地址都会改变,但他们的静态基址和偏移不会变关于获取的是静态基址,所以就算是关闭了游戏,再开启动,地址也是不变的也可以修改所以我们用CE找到他的静态地址和偏移地址,再用C/C++里面的ReadProcessMemory和WriteProcessMemory进行修改就可以了。下面用图文解析用CE找植物大战僵尸向日葵产生的那个Sunshine首先打开CE,选择植物大战
# 学习如何实现“Python 基址” 在这篇文章中,我们将一起探讨如何在Python中实现基址。对于初学者来说,理解基址的概念非常重要,尤其是在涉及到低级编程和内存操作的领域。下面,我将为你提供一个详细的流程,包括每一步需要做什么,以及相应的代码示例和解释。 ## 流程概述 为了更清晰地理解实现过程,我们将整个流程分为几个步骤。以下是每一步的简要描述: | 步骤 | 描述
原创 10月前
65阅读
JavaWeb中Servlet、web应用和web站点的路径细节("/"究竟代表着什么)1 开门见山新建一个tomcat web项目,配置tomcat的虚拟目录,取默认值(/项目名_war_exploded) 那么如果你的tomcat的默认站点(即http://localhost:8080)没有更改的话,这个项目的两个重要的根目录就出来了web站点根目录为:http://localho
动态加载dll功能: 把一个处于内存里的dll直接加载并且使用。用途: 免杀(静态文件查杀),外挂(防止游戏自己hook了loadlibrary等函数),以及其他。原理: 假设目前处于内存...
原创 2022-07-21 10:55:40
519阅读
  • 1
  • 2
  • 3
  • 4
  • 5