使用 ABAP 在 SAPGUI 里直接执行 Linux 操作系统的命令

简介: 使用 ABAP 在 SAPGUI 里直接执行 Linux 操作系统的命令

笔者之前曾经写过一篇文章:聊聊 C 语言和 ABAP,里面提到,ABAP 语言底层,包括其关键字和虚拟机(也就是 ABAP Runtime),都是基于 C/C++ 实现的。其中 ABAP 里使用最简单的 WRITE 关键字,其 C++ 的源代码就多达 2000 行以上。这个数字我是怎么知道的?答案是用本文马上要介绍的自己编写的一个小工具,找到 WRITE 实现的 C 语言源代码文件,然后看文件总行数得来的。


细心的 ABAP 开发人员可以在 ABAP 系统里,找到一些 C/C++ 的影子。


比如打开一个 ABAP 类 CL_ABAP_COMPILER 的 CHECK_FEATURE 方法,发现其实现逻辑写在了 ABAP Kernel 里,在 SAPGUI 里看到的方法只是一个壳:

ABAP 帮助文档里对这些 Kernel 方法的定义:内核方法允许直接调用用 C 或 C++ 实现的内核函数。这些内核方法取代了以前传统的 C 调用和 System Call 的概念。

再比如,我们使用 ABAP 关键字 SUBMIT,提交一个系统里并不存在的 ABAP 报表:

执行上面这个报表,发生 LOAD_PROGRAM_NOT_FOUND 运行时错误。

在 ST22 事务码里查看这个错误,在 BASIS Developer View 里,能发现 ABAP 关键字 SUBMIT,在 ABAP Kernel 里实现的源文件为 absubmit.c.


打开这个文件,里面是密密麻麻的 C 程序。在 Active Calls in SAP Kernel 里,包含了发生这个运行时错误的 C 函数调用上下文信息:

在 ABAP Control Blocks 区域,能看到这个运行时错误,是在执行虚拟机指令 SUBM 时发生的。图中这些 PERP,ENDM,SUBM 等 ABAP 虚拟机指令,可以类比成 JVM 字节码指令集。

在 ABAP 调试器里,我们通过下图的菜单项,选择 Switch to Classic Debugger,从默认的标准调试器,切换到传统调试器:

然后在 System Areas 里选择 Internal Information:

Area 字段输入 CONT 后回车,就能看到当前 ABAP 程序待执行的指令了:

前面说到,ABAP Kernel Method 取代了传统的 C 调用。所谓 C 调用,就是 ABAP 关键字 CALL. 利用这个关键字,可以在 ABAP 里执行一些系统函数。

SAP 文档明确规定,所有的 C 调用都仅能由 SAP 内部使用,不允许用来开发应用程序。所以,大家只能在 SAP 标准的框架程序看到这些 C 调用的身影。

使用下面这行 ABAP 代码,我们可以直接在 ABAP 程序里,执行 ABAP 系统安装所在的操作系统的命令:

CALL ‘SYSTEM’ ID ‘COMMAND’

根据这行 ABAP 代码,我写了一个简单的 ABAP 报表,把这个系统函数调用封装了一下,代码如下:

演示一下这个小工具的执行效果。在报表里输入想要执行的 Linux 操作系统命令,比如 ps -aux,查看当前运行的操作系统进程列表:

Linux 操作系统进程列表打印结果如下:

使用 ls -l 命令,列出 Linux 操作系统指定文件夹下相关的 ABAP 关键字的 C 程序实现源文件列表:

列表如下,密密麻麻的都是 aba 开头的 C 和 C++ 实现文件:

双击某个文件,就能查看其源代码了:

如果大家对 ABAP 和 C/C++ 的关系感兴趣,请重温我之前发布过的这篇文章:聊聊 C 语言和 ABAP.

相关文章
|
19天前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
32 0
|
20天前
|
Linux 编译器 开发者
Linux设备树解析:桥接硬件与操作系统的关键架构
在探索Linux的庞大和复杂世界时🌌,我们经常会遇到许多关键概念和工具🛠️,它们使得Linux成为了一个强大和灵活的操作系统💪。其中,"设备树"(Device Tree)是一个不可或缺的部分🌲,尤其是在嵌入式系统🖥️和多平台硬件支持方面🔌。让我们深入了解Linux设备树是什么,它的起源,以及为什么Linux需要它🌳。
Linux设备树解析:桥接硬件与操作系统的关键架构
|
1月前
|
Linux 数据安全/隐私保护 虚拟化
Linux技术基础(1)——操作系统的安装
本文是龙蜥操作系统(Anolis OS) 8.4 的安装指南,用户可以从[龙蜥社区下载页面](https://openanolis.cn/download)获取ISO镜像。安装方法包括物理机的光驱和USB闪存方式,以及虚拟机中的VMware Workstation Pro设置。安装过程涉及选择语言、配置安装目标、选择软件集合和内核,设置Root密码及创建新用户。安装完成后,可通过文本模式或图形化界面验证系统版本,如Anolis OS 8.4,标志着安装成功。
|
1月前
|
存储 缓存 算法
Linux--系统结构与操作系统
Linux--系统结构与操作系统
|
1月前
|
安全 Linux 网络安全
如何在 VM 虚拟机中安装 Red Hat Enterprise Linux 9.3 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 Red Hat Enterprise Linux 9.3 操作系统保姆级教程(附链接)
94 0
|
19天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
22 0
|
1月前
|
存储 Shell Linux
【Shell 命令集合 网络通讯 】⭐Linux 显示当前系统的主机名和操作系统类型 uuname命令 使用教程
【Shell 命令集合 网络通讯 】⭐Linux 显示当前系统的主机名和操作系统类型 uuname命令 使用教程
29 0
|
1月前
|
算法 Linux 调度
根基已筑!Anolis OS 23.1 预览版本搭载 Linux 6.6 内核和工具链升级完成
Anolis OS 23.1 对软件包的选择和组合进行了重新规划与决策,满足更为广泛的应用场景需求。
|
1月前
|
安全 Linux 开发者
分析Linux桌面操作系统的迅速增长及其未来前景
最近技术圈新闻“层出不穷”,尤其是在最近,Linux桌面操作系统的市场份额迅速增长,Linux桌面操作系统的市场份额近期呈现火速增长的趋势,这一数据虽然看似不太引人注目,但实际上却具有重要的意义,达到了历史新高。了解Linux的开发者想必都知道,历经30年的努力,Linux系统的份额才在不久前达到了3%,而如今仅用了八个月的时间就新增了1%,显示出开源操作系统正迅速升温。尽管Windows和macOS仍然主导着桌面操作系统市场,但前者的份额波动较小,后者则略有下滑。虽然Linux的表现出色,但要想取得主导地位还有一段距离,有些开发者认为这是因为缺乏一个适用于所有Linux发行版的标准化桌面界面
25 1
分析Linux桌面操作系统的迅速增长及其未来前景
|
1月前
|
存储 缓存 供应链
『Linux升级路』冯诺依曼体系结构与操作系统
『Linux升级路』冯诺依曼体系结构与操作系统