几周前,丹麦网络安全中心出现了挑战。 见https://puzzling.stackexchange.com/questions/49702/programming-news-paper-puzzle/49757
挑战的一部分是修复程序集代码,加载.img文件进行处理然后进行编译。该文件名为u5emu.asm。
名为David J的用户在此处发布了.asm代码的清理版本:http://pastebin.com/TChuYF29
他写道时有一个小错误。而不是在第126行,否则它看起来不错。我还做的是在.asm代码中将getchar和putchar更改为_getchar和_putchar,这样C lib就可以工作了。另外,我将U5_LE编辑为_asm_main:因为driver.c的主要调用_asm_main。
我已经通过以下方式创建了一个.exe:
nasm -f win32 u5emu.asm
gcc -o u5emu u5emu.obj driver.c asm_io.obj
创建可执行文件。我很确定该程序会询问我输入(因为它有一个getchar)然后它将处理包含的文件(一个B64编码的字符串,我已经清理并删除奇数符号,如[,;等)和为下一部分挑战提供了线索。
当我运行exe时,它会崩溃,我在调试时遇到两种错误:
Unhandled exception at 0x546CD4A1 in u5emu.exe: 0xC0000005: Access violation reading location 0x00000000.
和
Exception thrown at 0x00000000 in u5emu.exe: 0xC0000005: Access violation executing location 0x00000000
我在这里遇到了死胡同,所以希望有人可以帮我解决这个问题。
答案 0 :(得分:1)
不是你问题的答案,但我可以告诉你我做了什么:我把小程序改写成C(使用32个操作码的开关)。这使得添加调试打印输出等变得更加容易。提示#2:记住交换字节,模拟机器是大端。