Linux小技巧

转载请注明出处。https://rhirufxmbcyj.gitlab.io

Vim获取文件编码格式

set fileencoding

gcc编译出地址随机化的可执行程序

编译出的文件第一个loadsegment地址为0,并且ELF头的文件类型位DYN类型而不是EXEC

gcc -fPIE -pie xxx.c

使用XShell从windows上传文件到linux

ubuntu下使用 sudo apt install lrzsz
在xshell界面输入rz即可选择windows的文件
双击即可传输
ps:不支持传输文件夹

使用XShell从linux下载文件到windows

ubuntu下使用 sudo apt install lrzsz
在xshell界面切换到linux的文件所在目录
输入命令:sz 文件名
弹出windows对话框,选在要保存的位置
保存即可

使用python获取main函数的返回值

Linux小技巧
main函数的返回值和exit(n)需要在0-255之间,否则结果是未定义的。

ubuntu 16.04 集成了python2.7和3.5.终端直接输入"python"打开的时2.7版本,输入"python3" 打开的时3.5的版本

更新ubuntu的源为网易源

sudo vim /etc/apt/source.list
然后删除里面所有的东西,将下列源地址粘贴进去

deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse

sudo apt-get update

Ubuntu 14.04安装cmake3.x

sudo apt-get install build-essential
wget http://www.cmake.org/files/v3.4/cmake-3.4.1.tar.gz
tar xf cmake-3.4.1.tar.gz
cd cmake-3.4.1
./configure
make
sudo apt-get install checkinstall
sudo checkinstall
sudo make install

最后在终端输入:cmake --version

如果显示cmake version 3.4.1

则安装成功!

Linux下安装edb

edb也就是linux下类似OD的调试工具,不喜欢记gdb那些太多的命令可以使用这个调试工具来调试,虽然有很多不足,但是好歹也是个可视化窗口的调试工具。

项目地址:https://github.com/eteran/edb-debugger

  • 安装edb
先安装依赖
sudo apt-get install       \
    git                    \
    cmake                  \
    build-essential        \
    libboost-dev           \
    libqt5xmlpatterns5-dev \
    qtbase5-dev            \
    qt5-default            \
    libqt5svg5-dev         \
    libgraphviz-dev        \
    libcapstone-dev

# build and run edb
git clone --recursive https://github.com/eteran/edb-debugger.git
cd edb-debugger
mkdir build
cd build
cmake ..
make
./edb

枚举窗口

目前只在ubuntu下试过,linux没有windows上那种EnumWindow函数,知乎上问到有个工具wmctrl,https://www.zhihu.com/question/271750064,github上搜了下,拿到了源码,有了源码再研究定制化的功能吧。

64位Ubuntu编译32位程序

  • gcc 加-m32参数 编译出来的程序为32位程序
  • 安装32位的库
sudo apt-get install gcc-multilib
sudo apt-get install g++-multilib

64位CentOs编译32位程序

yum install libstdc++.so.6
yum install glibc-devel.i686  
yum install glibc.i686
yum install libgcc.i686

获取当前进程路径

#include <stdio.h>  
#include <unistd.h>  
#include <linux/limits.h>  
  
int main() {  
    char dir[PATH_MAX] = {0};  
    int n = readlink("/proc/self/exe", dir, PATH_MAX);  
    printf("PATH_MAX: %d\n", PATH_MAX);  
    printf("readlink return: %d\n", n);  
    printf("dir: %s\n", dir);  
  
    return 0;  
}