
但是针对不兼容的浏览器,如何能做到降级的同时不会出现漏洞呢。
想请教一下大佬们针对这种场景都是怎么做的。
]]>在屏幕的第一行显示数据 belles 。 belles db "Reading is a happy thing. For those who love reading, once they read it," 。请根据需要编写子程序,实现:依次取走字符,并让字符从其位置跌落到屏幕底部并消失。
我自己的想法是将做好几个循环来写,比如第一个循环让第一个字符往下掉,第二个就让第二个往下掉啥的,但是我写了一个发现做这样的循环直接运行之后 DosBox 会直接卡死,问 GPT ,但是 GPT 自己给的代码总是有问题,百度一下也只能找到一个代码,那个代码也不能实现题目要求的效果,做了几个小时了还卡在这
我真的没办法了,所以我来请教各位,求求各位大佬帮帮我吧 如果给不了代码,给我点思路也行,我自己会去试的
]]>在屏幕中的第 10 行到 15 行的第 20 列开始显示如下菜单: Arithmetic system of primary school
然后我写出了下面的代码
assume cs:codesg, ds:datasg datasg segment welcome db 'Arithmetic system of primary school$' file db '1. add$' insert db '2. subtract$' modify db '3. multiply$' exit db '4. devide$' datasg ends codesg segment start: mov ax, datasg mov ds, ax mov ah, 02h mov dh, 09h mov dl, 13h int 10h lea dx, welcome mov ah, 09h int 21h mov ah, 02h mov dh, 10h mov dl, 13h int 10h lea dx, file mov ah, 09h int 21h mov ah, 02h mov dh, 11h mov dl, 13h int 10h lea dx, insert mov ah, 09h int 21h mov ah, 02h mov dh, 12h mov dl, 13h int 10h lea dx, modify mov ah, 09h int 21h mov ah, 02h mov dh, 13h mov dl, 13h int 10h lea dx, exit mov ah, 09h int 21h ;等待用户按键 mov ah, 07h int 21h mov ah, 4ch int 21h codesg ends end start 这个代码可以正确显示出我要的内容,但是第一行和第二行之间总是有空行,具体表现如下

我真的想不明白问题出在哪里 不论是问百度还是问 gpt 都不太管用,我没法了所以来问问各位,希望有懂的救一下,我先谢谢各位了
]]>int duplicate(int n) { return n * 2; } int global_var = duplicate(0x42); int main(int argc, char** argv){ return global_var; } 有一个 global variable, 用以下命令编译,并查看汇编代码:
g++ -o main ./main.c -O0 objdump -C -S -s main 其输出可见: https://controlc.com/70c59b1e
总是听别人说,static storage variable(基本上就是 global variable)在进入main之前就被初始化了,但是在查看汇编代码时,我并没有找到相关的调用。
__static_initialization_and_destruction_0(int, int)看起来像是初始化global_var,被_GLOBAL__sub_I__Z9duplicatei调用,但是我没有在任何地方看到对_GLOBAL__sub_I__Z9duplicatei的调用。因此想请问我的思路对么?
对此我产生了几个问题:
二、基于 8088CPU 设计一个模拟数据采集系统。 具体要求如下: ( 1 )采用 ADC0809 A/D 转换器与 Intel 8255 可编程并行接口芯片设计接口电路。设 8255 的 PA 为数据口,PB 、PC 为控制口,输入模拟量接入 ADC0809 的 IN1 通道。画出 ADC 0809 通过 Intel 8255 与 8088CPU 接口的电路原理图。 ( 2 )假设地址码为 3F0H~3F3H 时 8255 片选信号有效,采用 74LS138 译码器设计地址译码电路。画出地址译码器与 CPU 系统和 8255 之间的连线图。 ( 3 )用汇编语言编写一段程序,实现从 IN1 通道读取 100 个数据并存入内存数据段中。
]]>版本:
qemu:QEMU emulator version 1.5.3 (qemu-kvm-1.5.3-167.el7_7.4), Copyright (c) 2003-2008 Fabrice Bellardcentos:CentOS-7-x86_64-Minimal-1908gdb:GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-115.el7The ROM BIOS 这个章节,A 窗口 make qemu-gdb,B 窗口 make gdb
A:
/usr/libexec/qemu-kvm -drive file=obj/kern/kernel.img,index=0,media=disk,format=raw -serial mon:stdio -gdb tcp::25000 -D qemu.log -S VNC server running on `::1:5900' B si 单步调试:
[f000:fff0] 0xffff0: ljmp $0xf000,$0xe05b [f000:e05b] 0xfe05b: cmpl $0x0,%cs:0x69c8 [f000:e062] 0xfe062: jne 0xfd0f7 [f000:e066] 0xfe066: xor %dx,%dx [f000:e068] 0xfe068: mov %dx,%ss [f000:e070] 0xfe070: mov $0xf1399,%edx [f000:e076] 0xfe076: jmp 0xfcf8c [f000:cf8c] 0xfcf8c: cli [f000:cf8d] 0xfcf8d: cld [f000:cf8e] 0xfcf8e: mov %eax,%ecx [f000:cf91] 0xfcf91: mov $0x8f,%eax [f000:cf97] 0xfcf97: out %al,$0x70 [f000:cf9b] 0xfcf9b: in $0x92,%al [f000:cf9d] 0xfcf9d: or $0x2,%al [f000:cf9f] 0xfcf9f: out %al,$0x92 [f000:cfa4] 0xfcfa4: lidtw %cs:0x69b8 [f000:cfaa] 0xfcfaa: lgdtw %cs:0x6974 [f000:cfb0] 0xfcfb0: mov %cr0,%ecx [f000:cfb3] 0xfcfb3: and $0x1fffffff,%ecx [f000:cfba] 0xfcfba: or $0x1,%ecx [f000:cfbe] 0xfcfbe: mov %ecx,%cr0 切入 PE 之后:
The target architecture is assumed to be i386 => 0xfcfc9: mov $0x10,%ecx => 0xfcfce: mov %ecx,%ds => 0xfcfd0: mov %ecx,%es => 0xfcfd2: mov %ecx,%ss => 0xfcfd6: mov %ecx,%gs => 0xfcfd8: jmp *%edx => 0xf1399: sub $0x8,%esp => 0xf139c: movl $0xf4254,0x4(%esp) => 0xf13a4: movl $0xf390a,(%esp) => 0xf13ab: call 0xee4dd => 0xee4dd: lea 0x8(%esp),%ecx => 0xee4e1: mov 0x4(%esp),%edx => 0xee4e5: mov $0xf4200,%eax => 0xee4ea: call 0xedd5a => 0xedd5a: push %ebp => 0xedd5b: push %edi => 0xedd5c: push %esi => 0xedd5d: push %ebx => 0xedd5e: sub $0xc,%esp => 0xedd61: mov %eax,%ebx => 0xedd63: mov %edx,0x4(%esp) => 0xedd67: mov %ecx,%ebp => 0xedd69: mov 0x4(%esp),%esi => 0xedd6d: movsbl (%esi),%edx => 0xedd70: test %dl,%dl => 0xedd72: je 0xedfb6 => 0xedd78: cmp $0x25,%dl => 0xedd7b: jne 0xede1b => 0xede1b: mov %ebx,%eax => 0xede1d: call 0xec570 => 0xec570: mov %eax,%ecx => 0xec572: movsbl %dl,%edx => 0xec575: call *(%ecx) => 0xec565: mov %edx,%eax => 0xec567: mov 0xf683c,%dx => 0xec56e: out %al,(%dx) => 0xec577: ret => 0xede22: jmp 0xedfaa => 0xedfaa: lea 0x1(%esi),%eax => 0xedfad: mov %eax,0x4(%esp) => 0xedfb1: jmp 0xedd69 => 0xedd69: mov 0x4(%esp),%esi => 0xedd6d: movsbl (%esi),%edx => 0xedd70: test %dl,%dl => 0xedd72: je 0xedfb6 => 0xedd78: cmp $0x25,%dl => 0xedd7b: jne 0xede1b => 0xede1b: mov %ebx,%eax => 0xede1d: call 0xec570 => 0xec570: mov %eax,%ecx => 0xec572: movsbl %dl,%edx => 0xec575: call *(%ecx) => 0xec565: mov %edx,%eax => 0xec567: mov 0xf683c,%dx => 0xec56e: out %al,(%dx) => 0xec577: ret ... 中间隔开的那一段一直到 ... 就是死循环,但是如果这个时候 c continue 的话 A 又可以进 kernel,而且试了断点,并没有进 0x7c00。
找到一篇:https://stackoverflow.com/questions/11408041/how-to-debug-the-linux-kernel-with-gdb-and-qemu/33203642#33203642,把 A 窗口换成直接执行:
/usr/libexec/qemu-kvm -drive file=obj/kern/kernel.img,index=0,media=disk,format=raw -serial mon:stdio -D qemu.log -S -s 其实就是换了 gdb TCP 1234 端口,然后按照 stackoverflow 上在 B 连 1234:
target remote localhost:1234 最终 si 还是进了死循环... 另外试了 -bios 参数,也确实是使用的 seabios.bin。
已经查不动了,求大佬解答~
]]>在学习缓冲溢出时,我根据要求写了一段取得程序 PID 的汇编来构造 ShellCode,其中一段调用了 C 中的 printf 来输出结果:
lea rdi, [rel message] mov rsi, rax call printf 反汇编后的结果如下:
13: 48 8d 3d e8 ff ff ff lea -0x18(%rip),%rdi # 2 <message> 1a: 48 89 c6 mov %rax,%rsi 1d: e8 00 00 00 00 callq 22 <code+0x19> 如上面代码第三行所示,opcode 出现了 \x00, 我搜索了一圈都没有合适的能把 \x00 替换掉的方案,于是想来 V 站问问各位大佬们~