踩过的坑

2021-02-19 #shell

在Shell脚本中使用管道,由于管道另一端开启了新进程,导致新进程脚本变量虽然可见,虽但无法对脚本变量应用修改。这就造成了如果管道另一端是 while 之类的语句块,则脚本中变量在语句块中看似被修改了,但跳出语句块后变量还是脚本中原有的值。解决方法也很简单,大致以下几种:

  1. 使用变量替代管道
  2. 使用重定向替代管道
  3. 使用进程替代(process substitution, <(command)>(command)

2021-01-20
Python 中的整型虽然没有长度限制,但通过 hash 函数调用的 __hash__ 魔术方法返回的整数长度是有限制的(记录在 sys.hash_info.width )。如果返回数值超过机器位宽,返回值将溢出。Debug 时就可能会遇到在 __hash__ 方法中观察到一个比较长的返回值,返回并赋值到变量后数值和之前观察的不一样,这种令人困惑的情况(没错,我就遇到了=_=)。顺带一提,直接调用 __hash__ 方法不会溢出。

https://docs.python.org/3/reference/datamodel.html#object.__hash__


2021-01-07

Java 加密中,PKCS5Padding 算法是填充到16字节(128位)的倍数。直接搜索PKCS5结果多会说是8字节的倍数……

Python 的 cryptography.hazmat.primitives.padding 包中没有提供 PKCS5。因为
PKCS7 可以填充到任意长度的倍数,所以可以使用 PKCS7 代替 PKCS5:

from cryptography.hazmat.primitives import padding

def PKCS5():
    return padding.PKCS7(16 * 8)

2021-01-06

App 在执行到 Frida 重写了的方法时崩溃,查看 logcat 可以看到类似于如下的报错:

zygote64: profile_saver.cc:359] Check failed: method.GetCounter() == 0u (method.GetCounter()=16, 0u=0) <方法签名…>

使用如下命令关闭 JIT 即可:

adb root
adb shell stop
adb shell setprop dalvik.vm.usejit false
adb shell start

Frida 后续的版本将会修复这个问题。

Troubles with ART`s JIT-profiles after Java method get hooked


2021-01-05

使用 docker cp 将文件复制到容器中可能会存在权限问题。目前想到的解决方法是使用 docker inspect 得到容器路径(UpperDir)后,直接到容器路径下使用 chown  改变文件所有者;如果容器可以运行起来,使用 docker exec  进入容器并打开一个 Shell 再使用 chown 操作文件。


2021-01-03

Android x86 启动后停留在字符终端、无法进入图形界面。可以进入Debug模式,编辑GRUB4DOS配置文件,加上内核参数 nomodeset 即可解决。


2020-01-23

Python中除下列转义字符,字符串中的反斜杠带上其他字符会被当作普通的反斜杠字符。

转义序列 意义 注释
\newline 反斜杠加换行全被忽略
\\ 反斜杠 (\)
\’ 单引号 (‘)
\” 双引号 (“)
\a ASCII 响铃 (BEL)
\b ASCII 退格 (BS)
\f ASCII 进纸 (FF)
\n ASCII 换行 (LF)
\r ASCII 回车 (CR)
\t ASCII 水平制表 (TAB)
\v ASCII 垂直制表 (VT)
\ooo 八进制数 ooo 码位的字符 (1,3)
\xhh 十六进制数 hh 码位的字符 (2,3)

Java中,编译时会报错。GCC编译时会有警告,运行时会忽略反斜杠。

https://docs.python.org/zh-cn/3/reference/lexical_analysis.html#literals


2019-12-15

使用gcc编译时,动态链接库放源代码后面。(依赖项放后面,被依赖项放前面)

如,源码中使用log() 函数,编译需要链接libm.so 。此时编译命令为:

gcc -o main main.c -lm


2019-12-09

PHP(7.3.12)mysqli.default_socketpdo_mysql.default_socket 等设置为空时,默认使用 /tmp/mysql.sock


2019-11-14

在amd64系统中使用gcc编译32位应用(-m32)时出现错误:

fatal error: bits/libc-header-start.h: No such file or directory

安装一下gcc-multilib

2019-09-05

CentOS手动运行yum工具安装的dockerd 后,用docker start 命令启动容器出现类似下面的Log

ERRO[0009] Handler for POST /v1.26/containers/<container_name>/start returned error: Unknown runtime specified docker-runc

关闭dockerd,用service命令启动问题解决。。。

或者加一些参数手动运行dockerd :–add-runtime docker-runc=/usr/libexec/docker/docker-runc-current –default-runtime=docker-runc

(之前一直用的是Binaries版https://download.docker.com/linux/static/stable/,以为都可以dockerd 直接运行。。。)


2019-08-12

为VirtualBox中的ArchLinux(5.2.8-arch1-1-ARCH 2019-08-01)虚拟机安装Virtualbox Guest Additions增强功能virtualbox-guest-utils/virtualbox-guest-utils-nox(6.0.10-1)后,不需要加载vboxfs模块,直接使用mount.vboxfs命令进行挂载。


2019-08-11

Windows XP SP3中VirtualBox 5.2.32运行虚拟机会有类似下面的错误弹窗:

不能为虚拟电脑 Arch 打开一个新任务.

The virtual machine ‘Arch’ has terminated unexpectedly during startup with exit code 1 (0x1). More details may be available in ‘E:\VirtualBox\Arch\Logs\VBoxHardening.log’.

返回 代码: E_FAIL (0x80004005)
组件: MachineWrap
界面: IMachine {85cd948e-a71f-4289-281e-0ca7ad48cd89}

上面提到的日志中显示加载crypt32.dll时出现问题:

49c.388: supR3HardenedScreenImage/LdrLoadDll: cache hit (Unknown Status -22900 (0xffffa68c)) on \Device\HarddiskVolume1\WINDOWS\system32\crypt32.dll
49c.388: Error (rc=0):
49c.388: supR3HardenedScreenImage/LdrLoadDll: cached rc=Unknown Status -22900 (0xffffa68c) fImage=1 fProtect=0x0 fAccess=0x0 cHits=6 \Device\HarddiskVolume1\WINDOWS\system32\crypt32.dll
49c.388: Error (rc=0):
49c.388: supR3HardenedMonitor_LdrLoadDll: rejecting ‘C:\WINDOWS\system32\crypt32.dll’ (C:\WINDOWS\system32\crypt32.dll): rcNt=0xc0000190
49c.388: supR3HardenedMonitor_LdrLoadDll: returns rcNt=0xc0000190 ‘C:\WINDOWS\system32\crypt32.dll’
49c.388: Fatal error:
49c.388: Error loading ‘crypt32.dll’: 1790 [C:\WINDOWS\system32\crypt32.dll]

将VirtualBox版本降到4.3.12后可正常使用。


2019-07-16

浏览器不会将URL中的fragment/anchor部分(锚点)发送到服务器。How to identify an anchor in a url in Django? – Stack Overflow


2019-05-22

使用IDEA(2018.1)打包jar文件时,MANIFEST文件不要放在src/main/java文件夹下。


2019-04-19

NGINX的GZip模块只对Response起作用。解压Request可能需要写Lua:https://huoding.com/2013/09/02/283

MariaDB中,即使是空数据表也要用CONVERT TO CHARSET改变编码。


2019-02-10

Gradle(4.4)配置Dagger2(2.21)时,annotationProcesser毫无用处。使用kapt后,编译有语法错误。错误指向由Kotlin(1.3.11)代码生成的Java源文件。使用最新版本Kotlin(1.3.21)不再报错。


2019-02-03

正则表达式后瞻断言(Lookbehind assertions (?<=…) )只能用于匹配定长字符串。即*、+、?、 {n,m}等操作都不允许出现。(?<=abc|abde) 的写法是被允许的。

http://php.net/manual/zh/regexp.reference.assertions.php


2019-01-16

使用Android的CoordinatorLayout,要在内容标签上设置app:layout_behavior=”@string/appbar_scrolling_view_behavior”才不会被ActionBar遮挡。


2018-08-20

RaspberryPi开启I2C后还要手动加载i2c-dev模块sudo modprobe i2c-dev


2018-08-16

AppCompatActivity右上角overflow按钮在设备存在物理菜单按键时不会显示。。。https://blog.csdn.net/jdsjlzx/article/details/36433441


2018-08-09

安装Ubuntu 16.04.5时选择中文安装界面后,步骤“安装系统”出现“无法安装busybox-initramfs”导致安装失败。


2018-07-28

Whoosh包1.6版vector设置为True的Schema在存储空字符串时会抛出IndexError异常,更新后正常。然而Flask-WhooshAlchemy插件的requirements.txt文件指定的Whoosh版本就是1.6,并且vector也设置为True。。。