golang time工具函数

package util-time import ( "strconv" "time" ) // 获取当前的时间 - 字符串 func GetCurrentDate() string { return time.Now().Format("2006/01/02 15:04:05") } // 获取当前的时间 - Unix时间戳 func GetCurrentUnix() int64 { return time.Now().Unix() } // 获取当前的时间 - 毫秒级时间戳 func GetCurrentMilliUnix() int64 { return time.Now().UnixNano() / 1000000 } // 获取当前的时间 - 纳秒级时间戳 func GetCurrentNanoUnix() int64 { return time.Now().UnixNano() } func GetCurrentTime() string { var cstSh, _ = time.LoadLocation("Asia/Shanghai") t := time.Now().In(cstSh).Format("2006/01/02/ 15:04:05") return t } func GetCurrentHour() int { var cstSh, _ = time....

June 23, 2020 · 1 min · zakudriver

GDT&LDT

GDT(Global Descriptor Table)全局描述符表 GDT是一个以 段描述符 为表项的数组类型的数据结构,在内存中线性存放。每个段描述符占 8 个字节。 GDTR寄存器存放GDT表的基地址和表长界限(高32位存放GDT基址,低16为存放GDT限长)。 指令LGDT和SGDT分别用于加载和保存GDTR寄存器的内容。在机器刚加电或处理器复位后,基地址被默认地设置为0,而长度值被设置成0xFFFF。在保护模式初始化过程中必须给GDTR加载一个新值。 段选择子(Segement Selector) 由GDTR访问全局描述符表是通过“段选择子”(实模式下的段寄存器)来完成的。段选择子是一个16位的寄存器(同实模式下的段寄存器相同)。 段选择子共16bit,由三部分组成: 描述符索引(index)、TI、请求特权级(RPL) 描述符索引(index): 在描述符表中定位一个段描述符。 TI: 描述符表指示器, TI=0 时,表示描述符在 GDT 中; TI=1 时,描述符在 LDT 中。 RPL: 请求特权级,表示给出当前选择子访问的内存段的特权级别。每一个段都有一个特定的级别。每当一个程序试图访问某一个段时,就将该程序所拥有的特权级与要访问的特权级进行比较,以决定能否访问该段。系统约定,CPU只能访问同一特权级或级别较低特权级的段。 因为每个描述符占 8 字节,因此描述符在表内的偏移地址是索引号乘以 8 处理器在执行任何改变段选择器的指令时(比如 pop、 mov、jmp far、 call far、 iret、 retf),就将指令中提供的索引号乘以 8 作为偏移地址,同 GDTR 中提供的线性基地址相加,以访问 GDT。 在表内找到的描述符,并加载到不可见的描述符高速缓存部分。此后每当有访问内存的指令时,就不再访问 GDT 中的描述符,直接用当前段寄存器描述符高速缓存器提供线性基地址。 段描述符(Segment Descriptor) 每个段描述符占 8 个字节。由三部分组成: 线性基地址、段界限和段的访问属性。 G: 粒度位,用于解释段界限的含义。当 G 位是"0"时,段界限以字节为单位。此时,段的扩展范围是从 1 字节到 1 兆字节( 1B~1MB),因为描述符中的界限值是 20 位的。 相反,如果该位是"1",那么,段界限是以 4KB 为单位的。这样,段的扩展范围是从 4KB到 4GB。...

June 11, 2020 · 1 min · zakudriver

获取用户home目录路径

func Home() (string, error) { user, err := user.Current() if nil == err { return user.HomeDir, nil } // cross compile support if runtime.GOOS == "windows" { return homeWindows() } // Unix-like system, so just assume Unix return homeUnix() } func homeUnix() (string, error) { // First prefer the HOME environmental variable if home := os.Getenv("HOME"); home != "" { return home, nil } // If that fails, try the shell var stdout bytes....

June 10, 2020 · 1 min · zakudriver

变量和标签

标签(Label) 指向一大块的首地址。 使用方法: LABEL_NAME: XXX XXX 局部Label 以(点)开头,比如.begin,.1,.2。在不同的段中可以使用相同的带点开头的LABEL,不能重复。最好只用在代码段中。 变量 函数变量 指的是一个SUB_RUTIN的首地址。 比如DispStr,使用的时候是call DispStr,然后在声明时候因为它本来就是一个地址,就是用上面标签的同样的声明方式。 DispStr:(注意后面有冒号) 普通变量 使用equ生成的纯的变量(宏) 比如:TopOfStack equ $ - LABEL_STACK - 1 使用db dd dw生成的变量(地址) 生成的各种变量分别指向的是不同的数据类型(冒号可加可不加) 比如: _dwDispPos: dd (80 * 6 + 0) * 2

June 9, 2020 · 1 min · zakudriver

irony-server-install

Mac 首先需安装cmake和llvm brew install cmake llvm emacs里执行M-x irony-install-server得到安装执行命令 cmake -DCMAKE_INSTALL_PREFIX\=/Users/kumotyou/.emacs.d/irony/ \ /Users/kumotyou/.emacs.d/elpa/irony-20200130.849/server \ && cmake --build . --use-stderr --config Release --target install 添加环境变量 -DCMAKE_PREFIX_PATH=/usr/local/opt/llvm -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON -DLIBCLANG_INCLUDE_DIR=/usr/local/opt/llvm/include -DLIBCLANG_LIBRARY=/usr/local/opt/llvm/lib/libclang.dylib 最终编译命令 cmake -DCMAKE_INSTALL_PREFIX\=/Users/kumotyou/.emacs.d/irony/ \ -DCMAKE_PREFIX_PATH=/usr/local/opt/llvm \ -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON \ -DLIBCLANG_INCLUDE_DIR=/usr/local/opt/llvm/include \ -DLIBCLANG_LIBRARY=/usr/local/opt/llvm/lib/libclang.dylib \ /Users/kumotyou/.emacs.d/elpa/irony-20200130.849/server \ && cmake --build . --use-stderr --config Release --target install Ubuntu 拉取ccls源码, 并进入ccls根目录 git clone https://github.com/MaskRay/ccls cd ccls 拉取第三方依赖....

May 29, 2020 · 1 min · zakudriver