问题标签 [corewars]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
570 浏览

assembly - 帮助理解 RedCode

我正在尝试学习 redcode,因为制作机器人看起来很有趣。

介绍

对于那些不知道什么是 redcode 的人,这里有一个简短的解释。它是一种类似 ASM 的语言,但更加简单和精简。它用于编写需要关闭虚拟内存中其他程序的小程序。(请参阅此处了解更多信息:http: //vyznev.net/corewar/guide.html

这是一段代码:

问题

基本策略是将自身复制到另一个地方,然后分叉该过程。我不明白的是这个规则:

我理解这条线的意思。它说,将目标的 B-Field 移动到顶点 B-Field 所在的线,并减小目标 B-Field 的值。

当第一次执行循环时,第一行将是:

据我所知,带有 Loop 的行的意思是:将指令向前移动 12 行(用 dat #0、#0 填充)到第 833 行。

但是当执行这段代码时,这行代码放在了第 839 行。

有人了解真正发生的事情吗?

0 投票
1 回答
198 浏览

assembly - 核心战争中的小鬼戒指

有人能解释一下核心战争中的小鬼戒指吗?

我认为上面的代码是 '88 标准的,因为它用于end表示程序的开始,并且标签没有冒号。

该程序从启动标签开始。我需要帮助想象这个小鬼环是如何“爬行”在记忆中的。

0 投票
1 回答
93 浏览

assembly - Why isn't this RedCode MOV working?

So, I'm in assembly class, and to keep things interesting, we have tournaments bi-weekly with Core Wars. I'm trying to make a simple application that copies an IMP further down in memory, then jumps back and has two IMPs going at the same time. The idea is once I get this part working to put it into a tight loop and make more than two.

Here's my code:

However, what's happening is the first MOV/SPL doesn't work, and so only the first IMP is running. Where am I going wrong in this logic? It works if I remove ADDR and just use a magic number.

Here's a screen snippet of the memory before it starts running.

Screen Snippet of Memory

Thanks.

0 投票
1 回答
109 浏览

automation - Automating CoreWars

I plan to make an evolutionary program to make redcode warriors for CoreWars. However, I have absolutely no idea how to run the code generated without having to manually open the program and put in the Warriors. Since I hope to have the evolutionary program run through several warriors per minute at least, I'd rather not have to play the role of administrator that much. I'm using the ARES simulator, but as for my research on running warriors through it with a script, I haven't found anything.

I'm really just looking for something like:

SomeSimulator.exe --warrior1 megalordthedestroyer.red --warrior2 tinathebabybunny.red

0 投票
2 回答
1896 浏览

assembly - 组装 - 安全竞争

我参加了名为'Code guru - Extreme'的比赛,在这个比赛中,8086组装有保险箱和钥匙。保险箱和钥匙有共同的数据段,你需要制作一把打破保险箱的钥匙。安全示例:

打破保险箱的钥匙示例

现在我有一个我不能打破它的保险箱


这种保险柜钥匙的模拟是在Core Wars 8086 引擎内部完成的。安全钥匙都是战争幸存者的规则如下:

幸存者无法在固定地址上加载,因为游戏引擎每轮都将它们加载到随机地址。生成的程序必须是 COM 而不是 EXE,并且只包含 8086 指令。

每个幸存者都会收到一组自己的完整寄存器(寄存器),其他幸存者无法访问。此外,每个幸存者都有一个 2048 字节的“个人”堆栈,其他幸存者也无法访问。

在运行第一轮游戏之前,游戏引擎将竞技场中的所有字节初始化为值 0CCh(注意:该字节值是“不支持”的指令 - 详情如下)。然后引擎将每个幸存者加载到竞技场内存中的随机位置,即 - 完全按原样复制幸存者文件的内容。两个幸存者之间的距离,以及幸存者与竞技场边缘之间的距离,保证至少为 1024 字节。每个幸存者的代码最多有 512 个字节。

在第一轮之前,游戏引擎将(每个幸存者的)寄存器初始化为以下值:

  • BX、CX、DX、SI、DI、BP - 重置。
  • 标志 - 重置。
  • AX, IP - 初始幸存者的位置,游戏引擎加载幸存者的竞技场中的随机偏移量。
  • CS, DS - 所有幸存者共有的竞技场部分。
  • ES - 同一组的幸存者共享的内存段(见高级技术)。
  • SS - 幸存者个人堆栈的开始部分。
  • SP - 偏移 幸存者个人堆栈的开始。

此时游戏以回合开始,每一回合运行游戏引擎运行每个幸存者的下一条指令,直到游戏结束:在 200,000 回合之后,或者当一个幸存者留在竞技场时。幸存者在每一轮中的出场顺序是在游戏开始时随机确定的,在游戏中不会改变。

在以下情况下,幸存者将被取消资格:

  • 运行非法指令(例如:字节 060h,它不会翻译成任何汇编指令)。
  • 游戏引擎运行“不支持”指令(例如:“INT 021h”)。游戏引擎会阻止试图启动与操作系统或计算机硬件的直接通信的运行指令。尝试访问不在竞技场范围内的内存,也不在幸存者的“个人”堆栈范围内。
  • 攻击其他幸存者是通过在竞技场内存中写入有关他们的代码的信息来完成的(为了让他们执行上述三个动作之一),从而取消他们的资格。因此,早些时候,人们必须找到他们藏身的地方:)
0 投票
0 回答
49 浏览

assembly - 核心战争,如何复制整个指令

我已经尝试过这些但到目前为止没有运气,接下来是 equak 到 200,move 是 dat 0、200,tot_ins 是 58,

0 投票
0 回答
311 浏览

assembly - x86 组装:很难找到无限循环挑战的想法

我打算和我的朋友们进行类似“corewars”的比赛(我们使用与原始游戏相同的内存网格)

在游戏中,我们每个人都想写一个“安全”,这是一个不超过 25 行的无限循环。每个“安全”都有一个技巧或代码可以停止循环,从而破坏“安全”。例如:

如果我们将正确的代码 (9999) 传递给 [1000],则可以破坏此保险箱,这将破坏保险箱:

我正在考虑制作某种数学方程式,然后将其结果用作保险箱的代码,但我没有任何既简短又有趣的好主意。

我不确定这个问题是否与这个堆栈站点相关,所以如果不是,我想知道解决这类问题的更好的堆栈站点。

0 投票
1 回答
285 浏览

debugging - 组装保险箱和钥匙 - 为什么它不起作用?

所以我们在组装中遇到了这样的保险箱挑战,您需要创建保险箱和钥匙来破坏它们并结束无限循环。下面是一个保险箱的例子:

和一个关键:

所以我有一个保险箱和一把钥匙,但我不明白为什么它不起作用:

这是我的保险箱:

这是我的关键:

打破循环的正确答案应该是 10 并且当我放入保险箱时它可以工作,不知何故用钥匙它不起作用而且我不知道为什么..(nasm 需要“单词”)

0 投票
1 回答
71 浏览

memory - 在 C64 上寻找类似汇编器的旧机器人语言

在与朋友的讨论中,我最近想起了 Commodore C64 时代的一个有趣的想法。不幸的是,谷歌搜索没有带来任何结果,这可能是因为我什至不知道谷歌搜索什么。所以,我想在这里寻求帮助......

简而言之,我记得曾经有一种非常简单的、几乎类似于汇编程序的编程语言,专门用于通过相互覆盖而在计算机内存中相互竞争的程序。就个人而言,我在 C64 上玩过它,但它也可能被移植到其他系统上。它可能被称为“程序战”或类似的东西,有一段时间有大型社区举办比赛和锦标赛。

有没有人足够大,知道我在说什么,并且可以帮助我提供一些信息?:)

提前致谢。

0 投票
2 回答
815 浏览

assembly - Core Wars 8086 安全挑战(安全使用内存地址上的加法)

我正在参加保险箱比赛,我得到了这个保险箱:

据我了解,cx 将在循环结束时为 0,并在下一次迭代时变为 FFFF。我也知道 0xCCh 是一条会停止程序的非法指令。我怎样才能破解这个保险箱?

**编辑:这里的目标是停止这个无限循环。循环没有停止项,我需要以某种方式使其停止使用逆向工程。例如:这是一个简单的保险箱

这是它的关键,使用逆向工程编写:


这种保险柜钥匙的模拟是在Core Wars 8086 引擎内部完成的。安全钥匙都是战争幸存者的规则如下:

幸存者无法在固定地址上加载,因为游戏引擎每轮都将它们加载到随机地址。生成的程序必须是 COM 而不是 EXE,并且只包含 8086 指令。

每个幸存者都会收到一组自己的完整寄存器(寄存器),其他幸存者无法访问。此外,每个幸存者都有一个 2048 字节的“个人”堆栈,其他幸存者也无法访问。

在运行第一轮游戏之前,游戏引擎将竞技场中的所有字节初始化为值 0CCh(注意:该字节值是“不支持”指令 - 详情如下)。然后引擎将每个幸存者加载到竞技场内存中的随机位置,即 - 完全按原样复制幸存者文件的内容。两个幸存者之间的距离,以及幸存者与竞技场边缘之间的距离,保证至少为 1024 字节。每个幸存者的代码最多有 512 个字节。

在第一轮之前,游戏引擎将(每个幸存者的)寄存器初始化为以下值:

  • BX、CX、DX、SI、DI、BP - 重置。
  • 标志 - 重置。
  • AX, IP - 初始幸存者的位置,游戏引擎加载幸存者的竞技场中的随机偏移量。
  • CS, DS - 所有幸存者共有的竞技场部分。
  • ES - 同一组的幸存者共享的内存段(见高级技术)。
  • SS - 幸存者个人堆栈的开始部分。
  • SP - 偏移 幸存者个人堆栈的开始。

此时游戏以回合开始,每一回合运行游戏引擎运行每个幸存者的下一条指令,直到游戏结束:在 200,000 回合之后,或者当一个幸存者留在竞技场时。幸存者在每一轮中的出场顺序是在游戏开始时随机确定的,在游戏中不会改变。

在以下情况下,幸存者将被取消资格:

  • 运行非法指令(例如:字节 060h,它不会翻译成任何汇编指令)。
  • 游戏引擎运行“不支持”指令(例如:“INT 021h”)。游戏引擎会阻止试图启动与操作系统或计算机硬件的直接通信的运行指令。尝试访问不在竞技场范围内的内存,也不在幸存者的“个人”堆栈范围内。
  • 攻击其他幸存者是通过在竞技场内存中写入有关他们的代码的信息来完成的(为了让他们执行上述三个动作之一),从而取消他们的资格。因此,早些时候,人们必须找到他们藏身的地方:)