1、编译一个hello程序

本机环境为ubuntu1604 64为例,通过以下命令编译64位程序
不建议通过gcc -m32 hello.cpp -o hello32在64位ubuntu中来生成32位程序
原因如下:(两次反编译时32位第一次反编译结果不能完全反编译)
ubuntu64.7z

  1. gcc hello.cpp -o hello
  1. #include<stdio.h>
  2. int main()
  3. {
  4. printf("hello world");
  5. return 0;
  6. }

通过编译两个不同位数程序,结果如下
image.png

2、ubuntu中运行linux_server

如要调试的程序是64位,则在ubuntu系统中运行linux_server64,并且在物理机Windows系统中运行IDA PRO64
如要调试的程序是32位,则在ubuntu系统中运行linux_server,并且在物理机Windows系统中运行IDA PRO
(如果没有按照这个要求,可能会出现以下问题)
image.png

image.png

3、在windows中调试hello

以下时IDA PRO32位设置方式,IDA PRO64设置一样(用于调试ubuntu中的64位程序,需要在ubuntu中运行linux_server64)
打开远程linux调试选项
image.png
填写调试信息
image.png
F2是下断点,F7步入,F8步过,F9运行
image.png

4、反调试对比

32位和64位helloworld都是在ubuntu64 1604的环境下用gcc编译生成
image.png

5、32位ubuntu编译

ubuntu32.7z
通过与在64位ubuntu下编译的hello对比,虽然代码完全一样但是最终编译出来的样本还是不一样的
image.png
image.png