gpt4 book ai didi

c - Mico C 虚拟机分段故障

转载 作者:太空宇宙 更新时间:2023-11-04 06:39:12 25 4
gpt4 key购买 nike

我下面的虚拟机在我的堆栈增量指令处发生段错误,该指令从 bin 指针获取堆栈偏移量并将其递增 1。如果我使用值 -1 这可以正常工作,但是当我通过 bp[1] 偏移量访问 -1 时它会崩溃。这对我来说真的没有意义,我做错了什么?

#include <stdio.h>
#include <stdint.h>
#include <unistd.h>

typedef enum {PUSH,STACKINC,EXIT} opCodes;
char * opCode[] = {"Push","Stack Increment","Exit"};

typedef struct VirtualMachine
{
uint32_t * sp; /* Stack Pointer */
uint32_t * bp; /* Bin Pointer */
uint32_t stack[100]; /* VM stack */
} VM;

void processVM(VM * vm)
{
uint32_t * bp = vm->bp;
uint32_t * sp = vm->sp;
printf("OP: %s\n",opCode[bp[0]]);

switch (bp[0])
{
case PUSH: sp[0] = bp[1]; sp++; bp+=2; break;
case STACKINC: sp[bp[1]]++; bp+=2; break;
}

vm->bp = bp;
vm->sp = sp;
/* Set out stack and bin pointers back */
}


int main()
{
uint32_t binFile[] = {PUSH,1,PUSH,2,PUSH,3,STACKINC,-1,EXIT};

VM myVM;
myVM.bp = binFile;
myVM.sp = myVM.stack;

while(myVM.bp[0] != EXIT)
{
processVM(&myVM);
usleep(200000);
}
printf("VM done executing\n");
}

最佳答案

你所有的变量都是无符号的。即使您存储 -1,您在回读时也会得到 4294967295。

关于c - Mico C 虚拟机分段故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10862622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com