1. line 标记
  2. Nightjs
  3. Gdb
  4. wsl 文件系统

line 标记

C语言中的#line宏

有了这个标记可以指定报错/调试的行数和文件名

Nightjs

第一处修改:bytebuffer 类的 [ ] 运算符可以越界

[[nodiscard]] u8& operator[](size_t i)
{
    // VERIFY(i < m_size);
    return data()[i];
}

第二处更改:删去了 toblock 长度检查


// 4. Let toSize be the number of bytes in toBlock.
// auto to_size = to_block.size();

// 5. Assert: toIndex + count ≤ toSize.
// VERIFY(to_index + count <= to_size);

找到了一个 wp

Gdb

查看记号 info functions

gdb 更改符号表目录,虽然符号表里面的路径是别人的,但是也可以在自己的电脑上找到源文件

逆天逆天,在 gdb 还没有 run 的时候下断点是无法找到文件位置的,但是 run 之后就可以找到了,ekngui 因为多文件的符号表是递归查找的,只有 run 起来才能找到更多?

pwndbg> file -readnow js
Reading symbols from js...
Expanding full symbols from js...
pwndbg> b  /home/giacomo/ctf/serenity/Userland/Libraries/LibJS/Runtime/ArrayBuffer.cpp:188
No source file named /home/giacomo/ctf/serenity/Userland/Libraries/LibJS/Runtime/ArrayBuffer.cpp.

但是 run 之后就可以正常下断点楽…

跟这个很像

info args
p/x *(zval*)(*(var_entries*)var_hashx.first).data[0]

wsl 文件系统

在编译的时候看见楽这个提示

WSL2 filesystem performance for IO heavy tasks (such as compiling a large C++ project) on the host

If it’s at all possible, store your projects in the Linux file system in WSL2.

感觉 wsl 和本地磁盘传文件确实极其慢