杂项小技巧
约 1043 个字 77 行代码 预计阅读时间 6 分钟
- 使用
mklink /d mhwmod D:\mhwmod
建立软链接(powershell 不支持,要用cmd) - 写批处理脚本的时候,可以在最后一行加上命令
pause
使其停留而不是直接关闭 - 推荐字体 0xProto Nerd Font Mono :https://www.nerdfonts.com/font-downloads
- 在 Github 仓库页面按下 。 键,即可打开 Web 编辑器,更方便查看代码
- 在 Powershell 中,where 是 Where-Object 的别名,因此想查找指令位置的话用
Get-Command
或者 where.exe
吧
| > Get-Command where
CommandType Name
----------- ----
Alias where -> Where-Object
> where.exe tex
D:\texlive\2023\bin\windows\tex.exe
|
- 注册表相关
- 事情的起因是 bhh 老师给了一份奇怪的注册表文件...运行完成后我的程序都以命令提示符形式运行了,这实在是太丑了!我难以忍受,因此不断翻找注册表希望改回去。
- 先去 HKCU 目录下找要修改的文件后缀名,我的话就是找
.exe
。找到后可以看到其默认值为 exefile
- 然后就去找
exefile
,其子目录 shell 文件夹下面就是右键菜单的内容,可以顺便清理下右键菜单 - 然后在
openn/command
中可以发现默认打开方式为 "%1" %*
,将它改为 wt "%1" %*
后确实可以得到我想要的效果,但是一些普通的应用程序启动前也会先启动终端了 %1
代表第一个参数,%0
代表第一个参数开始的所有参数
- 最终发现只需要在命令提示符左上角右键,选择属性,关闭旧版控制台选项即可,白费这么大力气
CTRL K + CTRL C or CTRL U
实现批量注释 Win+V
查看剪贴板记录 - Powershell 创建文件可以用
New-Item
,不过在 windows 直接用 md
命令即可 .\run.exe | tee output
显示运行结果 takeown \f QQNT
获取权限 - 或者
icacls QQNT /grant administrators:f
- C语言环境用 msys 搭建吧,编译器的优化差距真的很大
- 新建了
.gitignore
但前面已上传的文件没有撤回? - 使用
git rm --cached -r build
取消对其的跟踪
- 在任务管理器中结束 WWAHOST 进程,以跳过用户登录 OOBE 初始化
bhh 课上学到的一个很有意思的函数,可以用来一窥 printf
函数的实现方式:
| #include <stdio.h>
double f(char *s, void *v1, void *v2, void *v3)
{
double sum = 0;
char *p = (char *)&s;
p += sizeof(s); // 指向第一个参数的地址(不过参数也是指针形式)
while (*s != '\0')
switch (*s++)
{
case 'i': // int
sum += **(int **)(p); // 由于参数是一个指针,而 p 指向的指针的地址,因此需要将 p 看成二级指针来看待并引用两次
p += sizeof(int *); // 加上一个指针的大小得到下一个参数的地址
break;
case 'l': // long
sum += **(long **)(p);
p += sizeof(long *);
break;
case 'd': // double
sum += **(double **)(p);
p += sizeof(double *);
break;
}
return sum;
}
int main(void)
{
int a = 10;
long b = 20L;
double c = 30.0;
double s = f("ild", &a, &b, &c);
printf("%f\n", s);
// output: 60.000000
}
|
实际上,你也可以参考标准库 stdarg.h
及其中的 vsprintf
函数。
更加底层的方式输出整数对应的二进制:
| #include<stdio.h>
int main(void)
{
short int a = 0x1234;
for(int i = 0; i < 16 ; ++i, a <<= 1)
putchar((a < 0) + '0');
}
|
对于数组,根据其在内存中的存储格式,一般以如下眼光看待:
那么按字节循环右移,下标由低位向高位移动,得到的结果为:
而比特级别的右移是高位向低位移动,注意二者之间的区别。
python 打包 EXE 可以用 pyinstaller
,但是 pip install pyinstaller
下载过来的文件夹名叫 PyInstaller
,需要区分大写使用:
| python -m PyInstaller --onefile gui.py
|
- 使用
from bs4 import BeautifulSoup
来抓取静态网页 - 使用
selenium
来抓取动态网页
WSL1 中,要设置通过宿主机代理,直接在 ~/.bashrc
中加上:
| # .::: Proxy :::.
# 宿主机的 IP 地址
host_ip=127.0.0.1
# 设置代理端口(根据你的代理软件配置)
proxy_port=7890
# 设置代理环境变量
export http_proxy="http://$host_ip:$proxy_port"
export https_proxy="http://$host_ip:$proxy_port"
export all_proxy="socks5://$host_ip:$proxy_port"
# .::: Proxy :::.
|
WSL2 相关
微软的这wsl好用是好用,遇到的bug一堆...
先是 WSL2 分发安装不了,显示 FE
结尾的错误码,最终靠清理了一波注册表解决。
但是 WSL2 还是用不了,显示:
| > wsl -d kali-linux
远程过程调用失败。
错误代码: Wsl/Service/RPC_S_CALL_FAILED
|
先按照 https://github.com/microsoft/WSL/blob/master/CONTRIBUTING.md#enable-automatic-crash-dump-collection 的方法记录崩溃日志:
| md C:\crashes
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpFolder /t REG_EXPAND_SZ /d C:\crashes /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpType /t REG_DWORD /d 2 /f
|
然后用 windows 自带的 windbg 打开 .dmp
文件。记得先 CTRL+S
设置符号表路径:
| SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
|
导入后输入 !analyze -v
分析,可以看到:
| STACK_COMMAND: ~1s; .ecxr ; kb
SYMBOL_NAME: ldntvdm+132c
MODULE_NAME: ldntvdm
IMAGE_NAME: ldntvdm.dll
FAILURE_BUCKET_ID: INVALID_POINTER_WRITE_c0000005_ldntvdm.dll!Unknown
OS_VERSION: 10.0.26100.1
BUILDLAB_STR: ge_release
OSPLATFORM_TYPE: x64
OSNAME: Windows 10
FAILURE_ID_HASH: {c91c6b0b-23af-b325-08b3-37a44fff5217}
Followup: MachineOwner
|
总之就是这个 ldntvdm.dll
的问题,这个东西是我之前为了写 16bit 的汇编而安装的,不过 24H2 更新后好像也用不了了。所以直接删除,此时 WSL2 就恢复正常了。
想启动 sshd(或其它) 服务,但是总报错:
| System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
|
那么创建一个 wsl config:
并加上:
ssh 给服务器的 authorized_keys 中添加上公钥后还是不能用密钥对登录?可能是文件夹或文件的权限问题,尽量不要自己创建文件夹和文件,使用如下命令将公钥复制到对应服务器上:
| ssh-copy-id -p 22 sora@xx.xx.xx.xx
|
Comments: