汇编 way to explore 2024-05-16T06:28:00Z Copyright © 2010-2018, V2EX 在浏览器使用 wasm 如何解决兼容性问题 tag:www.v2ex.com,2024-05-16:/t/1041265 2024-05-16T03:54:51Z 2024-05-16T06:28:00Z foxyier member/foxyier 为了安全考虑, 打算采用 wasm 保护加密算法。

但是针对不兼容的浏览器,如何能做到降级的同时不会出现漏洞呢。

想请教一下大佬们针对这种场景都是怎么做的。

]]>
C++中 i=i; 与 *p=i; 对应的汇编代码为什么不一样? tag:www.v2ex.com,2024-02-23:/t/1017817 2024-02-23T03:56:41Z 2024-02-22T11:55:41Z huzhikuizainali member/huzhikuizainali int i=42;
int &r=i;
int *p=&i;
*p=i;
i=i;

上述 C++代码中 i=i; 与 *p=i; 对应的汇编代码为什么不一样?
godbolt.org
*p=i; 对应如下汇编语言
mov edx, DWORD PTR [rbp-20]
mov rax, QWORD PTR [rbp-16]
mov DWORD PTR [rax], edx

i=i;对应如下汇编语言
mov eax, DWORD PTR [rbp-20]
mov DWORD PTR [rbp-20], eax ]]> 汇编问题求解,这个问题我自己确实做不来 tag:www.v2ex.com,2023-12-08:/t/998869 2023-12-08T18:43:04Z 2023-12-08T21:43:04Z tiRolin member/tiRolin 题目要求如下

在屏幕的第一行显示数据 belles 。 belles db "Reading is a happy thing. For those who love reading, once they read it," 。请根据需要编写子程序,实现:依次取走字符,并让字符从其位置跌落到屏幕底部并消失。

我自己的想法是将做好几个循环来写,比如第一个循环让第一个字符往下掉,第二个就让第二个往下掉啥的,但是我写了一个发现做这样的循环直接运行之后 DosBox 会直接卡死,问 GPT ,但是 GPT 自己给的代码总是有问题,百度一下也只能找到一个代码,那个代码也不能实现题目要求的效果,做了几个小时了还卡在这

我真的没办法了,所以我来请教各位,求求各位大佬帮帮我吧 如果给不了代码,给我点思路也行,我自己会去试的

]]>
有谁能来教我一下汇编的问题吗?我真的因为这个卡了好久了 tag:www.v2ex.com,2023-11-30:/t/996629 2023-11-30T12:35:15Z 2023-11-30T13:48:44Z tiRolin member/tiRolin 题目要求是这样的

在屏幕中的第 10 行到 15 行的第 20 列开始显示如下菜单: Arithmetic system of primary school

  1. add
  2. subtract
  3. multiply
  4. divide

然后我写出了下面的代码

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 都不太管用,我没法了所以来问问各位,希望有懂的救一下,我先谢谢各位了

]]>
如何学习汇编语言? tag:www.v2ex.com,2023-05-16:/t/940385 2023-05-16T05:28:13Z 2023-05-16T21:08:19Z realdvorak member/realdvorak 已经看过了王爽老师的《汇编语言》,讲的很好,但是是用 8086 入门的。想进一步学习,有没有推荐的教材,现在在看《从实模式到保护模式》,这本怎么样?

]]>
Linux 下, global variable 在汇编里是什么时候被初始化的呢? tag:www.v2ex.com,2022-10-19:/t/888159 2022-10-19T08:46:09Z 2022-10-19T11:13:02Z dangyuluo member/dangyuluo 以下是源码:

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的调用。因此想请问我的思路对么?

]]>
Lock 指令到底有什么用? tag:www.v2ex.com,2021-01-14:/t/744836 2021-01-14T03:38:19Z 2021-01-14T06:43:37Z Orlion member/Orlion 最近在看原子操作的原理,得知是通过 Lock 指令保证了内存读写原子性,其原理是

对此我产生了几个问题:

  1. 难道不声明 Lock CPU 就不通过 MESI 协议保证 cache 一致性吗?我觉得不是, https://strikefreedom.top/cpu-caches-theory-and-application 这篇文章的 demo 中并没有声明 Lock 指令,但仍然出现了缓存失效。
  2. 是不是除了 cpu cache 外还有 store buffer 和 invalid queue 会影响可见性,所以 CPU 只能保证 cache 的一致性但保证不了其他硬件缓存层面的一致性,所以还是需要 Lock 指令?
]]>
求大神帮忙解答两个题,关于编程的,应付微机原理与应用过关考试的,不胜感激 tag:www.v2ex.com,2020-06-08:/t/679656 2020-06-08T04:07:18Z 2020-06-08T04:18:52Z zokin member/zokin 一、利用 DOS 系统功能调用编写汇编程序,在屏幕上显示自己姓的拼音和学号的后 4 个数字符号。例如,你姓“李”,你的学号是“20201234”,则在屏幕上显示出“LI:1234”。具体要求如下: ( 1 )编写出完整的汇编语言程序; ( 2 )利用宏汇编程序 MASM 和连接程序 LINK 对所编写的程序进行汇编和连接,生成可执行文件,并在 DOS 下运行程序。 ( 3 )打印出相应的列表文件(后缀 lst 的文件)清单,并对调试运行结果进行截图,以证明程序调试成功。

二、基于 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 个数据并存入内存数据段中。

]]>
6.828 lab1 Exercise 2 死循环问题 tag:www.v2ex.com,2020-04-21:/t/664577 2020-04-21T03:59:06Z 2020-04-21T03:58:06Z dogedoge member/dogedoge https://pdos.csail.mit.edu/6.828/2018/labs/lab1/

版本:

The 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

已经查不动了,求大佬解答~

]]>
如何解决 ShellCode 中 call 所产生的 \x00 tag:www.v2ex.com,2020-01-17:/t/638896 2020-01-17T21:48:45Z 2020-01-18T06:44:12Z Nullplus member/Nullplus 各位大佬好,想问一个关于汇编和 ShellCode 中零字节的问题。

在学习缓冲溢出时,我根据要求写了一段取得程序 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 站问问各位大佬们~

]]>
用 AMD64 汇编写的 web server tag:www.v2ex.com,2014-02-03:/t/98928 2014-02-03T12:07:37Z 2014-02-03T12:02:37Z Livid member/Livid https://github.com/nemasu/asmttpd ]]> 来做个调查,各位V2exer 有多少学过汇编?有用过否? tag:www.v2ex.com,2012-10-18:/t/50324 2012-10-18T08:41:09Z 2012-10-19T09:17:35Z keys member/keys Introduction to UNIX Assembly Programming tag:www.v2ex.com,2010-09-05:/t/2303 2010-09-05T08:57:40Z 2010-09-06T12:48:40Z Livid member/Livid http://asm.sourceforge.net/intro/Assembly-Intro.html ]]> ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86