Winelib调研报告
谢本壹2019.9.16-2019.9.18 Week5

目录

[TOC]


Winelib简介

Winelib是一个工具库,它包含,

  • Win32 API的实现,
  • Windows的头文件实现,
  • 编译工具,如winemaker(对应make),winegcc(对应gcc),winedbg(对应gdb),wrc(对应resource compiler)等。

Winelib用法

用户直接接触winelib的部分是一系列编译工具如winemaker,winegcc,winedbg等。这些工具在编译源码时会调用到Win32 API和Windows头文件,接下来简要介绍这些工具,

winemaker

对源文件做一些处理,比如改正大小写、将\改为/等,然后为项目生成makefile。

winemaker .

对于所有源文件都在同一目录的项目能很好的生产makefile,但是若源文件不在同一目录下的项目没法生成正确的makefile。

winegcc

对gcc的一个包装,支持所有gcc的参数。其man page有列出其独特的参数。

winegcc winHelloWorld.c -o winHelloWorld
# 生成winHelloWorld.exe和winHelloWorld.exe.so

winelib

winedbg

对gdb的一个包装。

移植的可能性

  • winegcc是对gcc的一个包装,让winegcc调用mips的gcc即可生成mips的.so文件;
  • wine作为一个加载器,本质上是对Linux的加载函数(比如dlopen)的加壳;
  • 被调用的Win32 API和Windows头文件源码均由C语言实现。

所以移植是可能的。

移植难度

  • 目标平台代码的量,inline asm,如何统计?

  • 平台相关代码的量,例如,

    enum target_cpu
    {
        CPU_x86, CPU_x86_64, CPU_POWERPC, CPU_ARM, CPU_ARM64
    };
    

关于代码分析的一些想法

面对一个陌生的大项目,如何开始了解并分析这个项目?一般来说是去看README文件,但是没有怎么办?由此产生了学习如何系统的来分析一个大项目的想法。

在看wine的代码的过程中,想要通过代码分析解决的问题,

需要分析的问题解决方案
1代码体量,代码分布,主要编程语言sloccountscc工具全文本输出。
2代码的框架llvm+graphvidoxygen输出call graph前者等价于用llvm编译整个项目然后用llvm的pass来分析的,makefile怎么改?后者是个写文档的软件,学习成本挺高。
3代码的可移植性暂无可以分析源码用到了多少inline asm?