我有这个代码在游戏中编辑地址以获得无限弹药和什么不是,我发现每台计算机的地址都不同,有时每次重新启动游戏,所以我怎么能管理这项工作仍然他们改变了.
我正在上一门计算机安全课程,还有额外的学分,可以将可执行代码插入到缓冲区溢出中.我有我正在尝试操作的目标程序的c源代码,并且我已经达到了能够成功覆盖当前函数堆栈帧的eip的程度.但是,我总是遇到Segmentation故障,因为我提供的地址总是错误的.问题是当前函数在pthread内部,因此,堆栈的地址似乎总是在程序的不同运行之间发生变化.是否有任何方法可以在pthread中查找堆栈地址(或者用于估计pthread中的堆栈地址)?(注意:pthread_create的第二个参数为null,所以我们不是手动分配堆栈地址)
在8086体系结构中,内存空间__CODE__大小分为多个逻辑段__CODE__.
即它有20个地址线,因此使用以下方法:
数据段寄存器向左移位4位然后加到偏移寄存器
我的问题是:虽然所有寄存器只有16位,但我们如何进行移位操作
我正在学习C并且目前正在学习指针.我理解将一个字节的地址存储在内存中作为变量的原理,这使得从内存中获取字节并写入内存地址成为可能.
但是,我不明白指针的地址存储在何处.假设一个指针的值(内存中一个字节的地址)存储在内存中 - 程序如何知道指针的存储位置?难道不需要指针指针导致指针指针无穷无尽的指针......?
UPDATE
实际问题是:"编译器如何为变量分配内存地址".我发现这个问题指出了这个话题.
感谢所有回答的人.
从本质上讲,4Gb如何变成4GB?如果内存是寻址字节,那么可能性不是2 (32/8)?
我是编程新手,目前我正在学习C中的指针.
我的问题是我已经读过,如果我们想要改变变量的值,我们必须将指针传递给它(即我们想要修改的值的位置).这是什么意思?我的意思是,我们必须传递指向函数的指针吗?声明的含义是什么,"我们必须将指针传递给我们想要修改的位置".
每当我在我的Cocoa应用程序中查看内存地址时,我会注意到(通常)3个主要类别的地址
0x00006xxxxxxx 0x00007fffxxxx 0x0000001xxxxx我知道什么是什么 - 就像我注意到0x00006xxxxxxx地址似乎是我应用程序对象的指针?
并且0x0000001xxxxx似乎是内存中实际对象的地址?
但我真的不确定任何事情,我无法形成一个好的谷歌查询给我一个答案.
有没有人有资源,或者知道如何识别Cocoa应用程序中的地址类别?
在以下代码中,指针指向其自己的内存地址.
#include <stdio.h>
int main()
{
void * ptr;
ptr = &ptr;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果指针能够指向自己的内存地址,那会有意义吗?
我试图了解地址计算指令的工作原理,尤其是leaq命令.然后当我看到leaq用于进行算术运算的例子时,我感到困惑.例如,以下C代码,
long m12(long x) {
return x*12;
}
Run Code Online (Sandbox Code Playgroud)
在组装中
leaq (%rdi, %rdi, 2), %rax
salq $2, $rax
Run Code Online (Sandbox Code Playgroud)
如果我的理解是正确的,那么leaq应该移动任何(%rdi, %rdi, 2)应该2*%rdi+%rdi评估的地址%rax.我感到困惑的是,因为值x存储%rdi在内,这只是内存地址,为什么%rdi乘以3然后左移这个内存地址 2等于x乘以12?是不是当我们%rdi用3时,我们跳到另一个没有值x的内存地址?
这里对C很新,我认为我几乎没有掌握指针的概念,但语法有点令人困惑所以我在试图理解这个表达式的x = (char *) &a;含义时遇到了麻烦.
其余功能供参考:
#include<stdio.h>
int main()
{
int a;
char *x;
x = (char *) &a;
a = 512;
x[0] = 1;
x[1] = 2;
printf("%d\n",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
更具体地说,为什么有必要写x = (char *) &a;而不是仅仅x = &a;?添加了(char *)什么来改变表达式?
memory-address ×10
c ×6
pointers ×4
addressing ×1
assembly ×1
c++ ×1
cocoa ×1
memory ×1
objective-c ×1
pthreads ×1
stack ×1
variables ×1
x86 ×1
x86-16 ×1