0X0ACE is back, who wants to have fun
0X0ACE is back, who wants to have fun
Other urls found in this thread:
en.wikipedia.org
en.wikipedia.org
fa82ee93-a-62cb3a1a-s-sites.googlegroups.com
en.wikipedia.org
npl.co.uk
80.233.134.207
multigesture.net
2ch.hk
80.233.134.210
ideone.com
twitter.com
whats this?
just a game
Seems like a really basic disassembly and manual stepping exercise. How the fuck do you respond in 5 seconds
I'm assuming you have to script it. If they dynamically generate the binary every time, you would need to create an emulator for their 10-instruction machine, run the binary there, and submit the result from your program.
That's not very hard to do. Think about it. What is that machine? Just a loop. Make an array, load the binary into it, set the instruction pointer to the beginning of the array and start looping over that shit.
The loop (1) reads an instruction off of the array while also incrementing the instruction pointer, (2) figures out what the fuck it is according to the described instruction format and, finally, (3) just does whatever the hell it's supposed to do based on the data obtained in step 2. Add some 16-bit globals, call them registers and we're done.
Creating the execution engine gives you the instruction decoder for free and will spare you the chore of manually computing the final state. I just didn't expect they'd reuse that fictional architecture often enough to make doing that worthwhile.
Never said it was hard, just that it's not as trivial as the case where the binary would be static.
How would you even "manually compute the final state" bypassing the execution of the binary?
>How would you even "manually compute the final state" bypassing the execution of the binary?
Using my head.
My initial approach to the problem was to write a simple disassembler and execute the code myself. It's less work and more fun when you have small programs and simple architectures such as the one described.
If the thing dynamically generates new programs, then I agree it's a lot better to implement the machine and just feed it the program.
Ah, yes, if they have a fixed binary I would probably not bother writing a single line of code desu.
I am stupid, I gotta study some more shit to do this kind of thing good luck to the ppl who are doing it.
You just gotta learn how processors work. Here's a nice tutorial:
multigesture.net
It's simple stuff, and understanding this sorta thing somehow puts people into the top 95% of programmers worldwide. This is how you implement things like programming languages. Of course, they're far more sophisticated in many ways... But the opcode interpreter can still be found if you look hard enough.
I'll take a look at it, thanks hopefully I won't be bottom 95% programmers.
Can someone explain? I feel stupid. In the example I see:
Code 0x00, move (first 8 zeros)
Mode 0x1, reg (0001)
Destination 0x0, register 0? (00)
Source 0x2, but it is optional and not specified in mode (10)
Imm 6815 (last 16 bits)
Im interested but somehow cant figure how the optional addresses are supposed to work.
>fun
what did he mean by that?
2ch.hk
Sup Forumsres/149931733.html
What is this russian shit
It's interesting they say they have been watching us in various occasions how did we not know.
0x1 mode probably means the optional src-reg parameter gets ignored
They're watching us? This thread?
yes, they are also working on it
I also do not understand this. It turns out that, 6815 value moved to r0 register, but no r1 as written in the example?
He meant you're a faggot milla
>No subroutines
>No indirect addressing or indirect jumping
What a piece of shit instruction set
Last one was easy. I don't know shit about this one.
fug
I wish code tags could allow everyone to execute Javascript like Stack Overflow's snippets. I'm on a temporary laptop and just too lazy to set up a proper development environment for C or something.
Aw what the fuck... I'm gonna give it a try in jsfiddle or something.
Sounds like it. Also the 9f 1a in the hex should be 1a 9f, unless that's some crazy interpretation of little endian.
how do I actually get to the OP page? I just get a missing key error.
The binary is in little endian and the hex is in big endien.
start playing
Solve the last challenge. It's still up for some reason.
So I finished my VM to run these programs. The problem is that the creator was very vague in describing his instruction set so I probably have a lot of details wrong. I'm having trouble decoding the opcode due to the instructions having a variable length. Right now I'm treating the 0x04, 0x0a, 0x0c, and 0x0d as 4 byte instruction. It seems to work ok but then it messes up down the road.
Am I missing one or can opcodes very length just based on the mod of the instruction.
>having to solve a shit ton of browser scripting puzzles before tackling the actual hard one
>script your browser so it always include a header
>script your browser so it scrapes the page's "captcha" and generates a number inside the returned interval
Fucking annoying. I'm interested in the OP's challenge, not this web scraping tutorial
aren't the instructions always 16 bits?
the example provides a 32 bit string which has 16 instruction bits despite being in reg mode (implies src-reg is irrelevant?)
The link to the current challenge is in the thread. You just need to modify your header to access it.
What you thinking about this? The 6815 value in the example is realy writting to r1 register. If this is true, why in "dest-reg" value is equal 0x00?
You have before yourself a move instruction.
It's in single register mode. Only one register is specified.
It has an immediate value attached.
Can you move a register to an immediate? No.
Can you move an immediate to a register? Yes.
Ignore the source register. It is noise.
But specified r0 register (00), not r1, how in example written!
0000 0000 = move
0001 = r1
0010 = reg+imm mode
rest = 6815
endianness is fucking us
This might be wrong, but here is how my vm interprets the example instruction.
MOV | 0x00 | 0b00000000
r0 | 0x00 | 0b00
r1 | 0x01 | 0b01
reg + imm | 0x02 | 0b0010
0x1A9F | 0x1A9F | 0b0001101010011111
So in C it would boil down to like
r1 = r1 + 0x9F1A;
I'm pretty sure I'm misinterpreting the meaning of what mod does.
>you have 5 seconds to respond
wat
Actually I think I'm an idiot. mod refers to the parameters that you give it. + is shorthand for and in this context. Looking at my disasm for the binary I'm working with only the jump instructions use 0x00 (immediate) mode.
REE GET OUT
Like this? But, why?? All bits are mixed up!
I... what
Instructions are nominally 32-bit, but since the second half is just a 16-bit immediate, you can also think of it as a 16-bit instruction followed by constant data.
No RAM, stack appears to be the only memory, apart from program instructions/constant data which is in separate ROM.
Top 2 bits of address mode, and top 4 bits of opcode, are currently unused, and can probably be ignored by the emulator.
dest-reg, src-reg, and imm are optional depending on the instruction and address mode, basically you just have to use common sense.
Take his picture and swap around the four bytes for mod and the four bytes for src,dest. Based off of my disassembly this is the right way to do it.
What do I need to read to learn how?
What's the logic behind the bit order?
The ruskies came up with this
Good night someone should OP tomorrow if thread dies
>32-bit fixed width instruction set
>only 4 registers
Someone has fucked up in designing this.
Does anyone know the format that the answer needs to be in? I finally finished my vm but I'm not sure of the formatting of the answer.
Turns out the creator was a fag.
Spent hours debugging my machine. Turns out that when he says """logical""" he actually means bitwise.
You just had to notice that instructions like OR r1, abcd are pointless if OR is logical.
True. I just figured that his limited instruction set didn't include it because they might just be used for setting the zero flag for the jump instructions.