program-counter相关内容

在地址0xXXXXXX&QOOT;处中断,没有可用的调试信息,或在程序代码之外

配置: 使用Ncore-L476RG。使用GNU arm Eclipse。我已经从STM32CubeMX生成了一个极简主义代码。我已在板载ST-Link中刷新了J-Link驱动程序。 我一直试图为我的代码运行调试器,但我的程序计数器没有设置为main()。相反,它无法读取某个内存地址。错误“在地址”0xXXXXXXXX“中断,没有可用的调试信息,或者在程序代码之外。”出现。 我已经包 ..
发布时间:2022-08-11 20:28:18 Java开发

如何在 C 或汇编中修改堆栈上的返回地址

如您所知,当子程序调用时,当前 PC(程序计数器)值存储在堆栈中.我想在子程序中修改它,如下所示.我想使用 gcc 编译器在 Intel Core-i7 3632QM 上执行此操作. void main(){富();}无效的富(){从栈中弹出返回地址;修改退货地址;将其推入堆栈;} 解决方案 这几乎可以肯定是一个 XY 问题,你没有说你真正想要做什么.无论如何,这里是修改返回地址的示例代码: ..
发布时间:2022-01-22 12:23:01 其他开发

ARM Cortex M3 如何在硬故障前确定程序计数器值?

我有一个使用 STM32F103 (ARM Cortex M3) 的嵌入式项目,它在发布模式下偶尔会出现硬故障.作为恢复的一部分,我想从硬故障之前检索 PC 值并将其存储在电池支持区域中以供以后调试. 如何确定发生硬故障时程序计数器的值?显然,PC 现在已设置为其在硬故障中断内的位置. 我应该去哪里看?有正常模式寄存器组的地址吗? 谢谢! 解决方案 Cortex-M3 使 ..
发布时间:2022-01-17 13:59:55 其他开发

直接读取程序计数器

Intel CPU 上的程序计数器是否可以在内核模式或其他模式下直接读取(即无需“技巧")? 解决方案 不,EIP/IP 不能直接访问,但在依赖位置的代码中,它是一个链接时间常数,因此您可以使用附近(或远处)符号作为即时. mov eax, near_label ;在位置相关的代码中附近_标签: 要在与位置无关的 32 位代码中获取 EIP 或 IP: 调用_here_here: ..
发布时间:2021-11-30 11:14:06 其他开发

堆栈指针和程序计数器有什么区别?

众所周知,微处理器执行任务的过程只是从内存中一条一条地执行二进制指令,并且有一个程序计数器保存下一条指令的地址.所以这就是处理器如何执行它的任务,如果我没有错的话.但是还有另一个名为 Stack Pointer 的指针,它的作用与程序计数器几乎相同.我的问题是为什么我们需要一个堆栈指针来指向内存(堆栈)的地址?有人能告诉我堆栈指针和程序计数器之间的主要区别吗? 解决方案 void show ..
发布时间:2021-11-17 22:16:56 其他开发

ARM Cortex M3 如何确定硬故障前的程序计数器值?

我有一个使用 STM32F103 (ARM Cortex M3) 的嵌入式项目,它在发布模式下偶尔会出现硬故障.作为恢复的一部分,我想从硬故障之前检索 PC 值并将其存储在电池后备区域中供以后调试. 如何确定硬故障点的程序计数器值?显然,PC 现在已设置为硬故障中断内的位置. 我应该在哪里看?有没有普通模式寄存器组的地址? 谢谢! 解决方案 Cortex-M3 使用与“经 ..
发布时间:2021-11-17 21:50:52 其他开发

如何在没有 0x00 或 0xFF 字节的情况下获取 x86_64 中的指令指针?

在汇编语言中,有没有一种方法可以在不使用 call 后跟 pop 的情况下访问指令指针 (RIP) 中的值?或者是否有可以做到这一点的机器代码操作码? 我一直在谷歌搜索,没有明确的结果. 我的问题是机器代码中不能有任何零,否则我会收到 SIGSEGV 错误.这是由于服务器加载代码并从一串字节执行它的方式.近调用在到子例程的距离上为零,因此不能选择使用调用. 我使用的是 64 位 ..
发布时间:2021-09-29 19:45:49 其他开发

代码如何在C ++抽象机上存储和执行?

在我读到的有关C ++的第一本书中,它详细介绍了如何在计算机上实际执行代码(它提到了程序计数器,调用堆栈,返回地址等)的细节.我知道了解这些东西的工作原理确实很着迷,尽管我知道并不需要知道计算机如何编写良好的代码. 在此Q/A网站上阅读相同主题时,我发现它绝非我以前所学的方法,因为我所读到的只是C ++的某种实现,具体取决于在某些计算机体系结构和某些编译器上.C ++代码也可以完全在其他代码 ..
发布时间:2021-05-28 20:15:59 C/C++开发

堆栈指针和程序计数器有什么区别?

众所周知,微处理器执行任务的过程只是从存储器一个接一个地执行二进制指令,并且有一个程序计数器保存下一条指令的地址.因此,如果我没有记错的话,这就是处理器执行任务的方式.但是还有另一个名为堆栈指针的指针,它的作用与程序计数器几乎相同.我的问题是为什么我们需要一个堆栈指针来指向内存(堆栈)的地址?有人可以告诉我堆栈指针和程序计数器之间的主要区别吗? 解决方案 void show(unsign ..
发布时间:2021-04-09 19:25:32 其他开发

为什么不能直接设置指令指针?

有关x86汇编的Wikipedia文章说,“程序员无法访问IP寄存器直接。” 直接表示带有mov和add之类的指令。 为什么不呢?这是什么原因呢?技术限制是什么? 解决方案 您无法直接访问它,因为没有合法的用例。任意更改指令 eip 会使分支预测非常困难,并且可能会引发一系列安全问题。 您可以使用 jmp ,通话编辑 eip 或 ret 。您只是无法使用常规操作直接读取或 ..
发布时间:2020-10-11 00:19:09 其他开发

从微体系结构抽象的x86程序计数器?

我正在阅读 RISC-V Reader:开放式体系结构图集。作者在解释ISA(指令集体系结构)与特定实现(即微体系结构)的隔离时写道: 对于架构师来说,诱惑在于将指令包含在ISA中,以帮助在特定时间实现一种实现的性能或成本,但会负担不同的或将来的实现。 据我了解,它指出,在设计ISA时,ISA应该理想地避免公开实现它的特定微体系结构的细节。 请牢记上面的引号:当涉及程序计数器时, ..

程序计数器和指令寄存器

程序计数器保存下一条要执行的指令的地址,而指令寄存器保存要执行的实际指令。其中之一还不够吗? 这些寄存器中每个寄存器的长度是多少? 谢谢。 解决方案 您将始终需要两者。程序计数器(PC)保存要执行的下一条指令的地址,而指令寄存器(IR)保存编码的指令。提取指令后,程序计数器将增加一个“地址值”(到下一条指令的位置)。然后对指令进行解码和适当执行。 同时需要这两个原因的原因 ..
发布时间:2020-10-11 00:09:50 其他开发

为什么32位处理器即使字长很大也只能寻址4GiB的内存?

直到现在,我还认为32位处理器可以使用4 GiB的内存,因为2 32 是4 GiB,但是这种方法意味着处理器的字长= 1字节 >.因此,具有32位程序计数器的进程可以寻址2 32 个不同的存储字,因此我们有4个GiB. 但是,如果处理器的字长大于1个字节,我相信现在大多数处理器都是这种情况(我的理解是,字长等于...数据总线,因此具有64位数据总线的处理器的字长= 8字节. 现在同一台 ..
发布时间:2020-05-08 20:23:02 其他开发

ARM Cortex M3如何在硬故障之前确定程序计数器值?

我有一个使用STM32F103(ARM Cortex M3)的嵌入式项目,在发布模式下偶尔会出现硬故障。作为恢复的一部分,我想从硬故障之前检索PC值,并将其存储在电池供电区域的以后调试中。 我如何确定程序计数器在硬故障点的值?显然,PC现在被设置在硬突破中断的位置。 我应该在哪里看?那里有正常模式寄存器银行的地址? 谢谢! 解决方案 Cortex-M3使用与“经典”ARM类 ..
发布时间:2017-08-15 20:17:54 HTML/CSS

GPGPU:在warp中有一个共同的PC的结果

我在一本书中读到,在波前或扭曲中,所有线程都共享一个公共程序计数器。那么它的后果是什么呢?为什么这么重要? 解决方案 NVIDIA GPU一次执行32个线程,而AMD GPU在时间(波阵面)执行64个线程。控制逻辑,读取和数据路径的共享减少了面积,并增加了perf / area和perf / watt。 为了利用设计编程语言,开发人员需要了解如何合并内存访问以及如何管理控制流分歧。如 ..
发布时间:2017-03-05 19:20:25 其它硬件开发

如何修改返回地址栈上在C语言或汇编

如你所知,当一个子程序调用,当前PC(程序计数器)的堆栈值店。我想修改它的子程序里面,像下面。我想这样做使用gcc编译英特尔酷睿,酷睿i7 3632QM。 无效的主要() { 富(); } 无效美孚() { 从堆栈中弹出返回地址; 修改返回地址; 推栈; } 解决方案 这是几乎可以肯定的XY问题,你没有说你真正想做的事情。 总之,这里是样本code ..
发布时间:2016-07-18 20:12:05 .NET Framework

的ARM Cortex M3如何确定一个硬件故障前的程序计数器值?

我使用的是STM32F103(的ARM Cortex M3),是越来越嵌入式项目越来越偶尔在释放模式硬件故障。作为恢复的一部分,我想从硬盘故障前获取的PC值,并将其存储在电池供电的区域后调试。 我将如何确定在硬故障点的程序计数器的值?显然,PC现在设置它的位置在hardfault中断之内。 我应该在哪里看?它有一个地址,在正常模式寄存器组? 谢谢! 解决方案 Cortex-M3的异常 ..
发布时间:2016-05-29 14:40:30 其它硬件开发