參考資訊:
https://zhuanlan.zhihu.com/p/597577575
https://cloud.tencent.com/developer/article/1460923
https://studies.ac.upc.edu/doctorat/ENGRAP/VxWorks-device-drivers.htm
https://forums.windriver.com/t/vxworks-software-development-kit-sdk/43
https://mail.prz-rzeszow.pl/~ssamolej/vxworks/vxworks_kernel_programmers_guide_6.6.pdf
https://d13321s3lxgewa.cloudfront.net/downloads/wrsdk-vxworks7-docs/2309/README_qemu.html
https://learning.windriver.com/path/vxworks7-essentials-workbench-and-tools/vxworks-kernel-shell
main.c
#include <stdio.h>
#include <string.h>
#include <syscall.h>
#include <syscallLib.h>
#include <private/rtpLibP.h>
#include <private/syscallLibP.h>
#include <syscallTbl.h>
long myhook(void *argv[3])
{
printf("file path: %s\n", (const char *)argv[0]);
return _openSc(argv);
}
_WRS_DATA_ALIGN_BYTES(16) SYSCALL_RTN_TBL_ENTRY test[] = {
SYSCALL_DESC_ENTRY(0xffffffff80875360, "_exit", 1),
{0},
SYSCALL_DESC_ENTRY(myhook,"_open",3),
SYSCALL_DESC_ENTRY(0xffffffff8063b660, "_close", 1),
SYSCALL_DESC_ENTRY(0xffffffff8063b680, "_read", 3),
SYSCALL_DESC_ENTRY(0xffffffff8063b5f0, "_write", 3),
SYSCALL_DESC_ENTRY(0xffffffff8063b870, "_ioctl", 3),
SYSCALL_DESC_ENTRY(0xffffffff8063bee0, "_dup", 2),
SYSCALL_DESC_ENTRY(0xffffffff8063bf10, "_dup2", 2),
SYSCALL_DESC_ENTRY(0xffffffff8063a120, "_pipe", 2),
SYSCALL_DESC_ENTRY(0xffffffff8063b590, "_remove", 1),
SYSCALL_DESC_ENTRY(0xffffffff8063bb40, "_selectX", 6),
SYSCALL_DESC_ENTRY(0xffffffff8091fb80, "_socket", 3),
SYSCALL_DESC_ENTRY(0xffffffff8091fd80, "_bind", 3),
SYSCALL_DESC_ENTRY(0xffffffff8091ffb0, "_listen", 2),
SYSCALL_DESC_ENTRY(0xffffffff80920100, "_accept", 3),
SYSCALL_DESC_ENTRY(0xffffffff809203c0, "_connect", 3),
SYSCALL_DESC_ENTRY(0xffffffff80920630, "_sendto", 6),
SYSCALL_DESC_ENTRY(0xffffffff80920890, "_send", 4),
SYSCALL_DESC_ENTRY(0xffffffff80920a30, "_sendmsg", 3),
SYSCALL_DESC_ENTRY(0xffffffff80920dc0, "_recvfrom", 6),
SYSCALL_DESC_ENTRY(0xffffffff80921060, "_recv", 4),
SYSCALL_DESC_ENTRY(0xffffffff80921220, "_recvmsg", 3),
SYSCALL_DESC_ENTRY(0xffffffff80921500, "_setsockopt", 5),
SYSCALL_DESC_ENTRY(0xffffffff809216c0, "_getsockopt", 5),
SYSCALL_DESC_ENTRY(0xffffffff809218c0, "_getsockname", 3),
SYSCALL_DESC_ENTRY(0xffffffff80921aa0, "_getpeername", 3),
SYSCALL_DESC_ENTRY(0xffffffff80921c80, "_shutdown", 2),
SYSCALL_DESC_ENTRY(0xffffffff80837230, "mmap", 8),
SYSCALL_DESC_ENTRY(0xffffffff80837280, "munmap", 2),
SYSCALL_DESC_ENTRY(0xffffffff808372b0, "mprotect", 3),
SYSCALL_DESC_ENTRY(0xffffffff80853d00, "kill", 2),
SYSCALL_DESC_ENTRY(0xffffffff80853bf0, "_pause", 0),
SYSCALL_DESC_ENTRY(0xffffffff80853b30, "sigpending", 1),
SYSCALL_DESC_ENTRY(0xffffffff80853960, "sigprocmask", 3),
SYSCALL_DESC_ENTRY(0xffffffff80853dd0, "_sigqueue", 4),
SYSCALL_DESC_ENTRY(0xffffffff80853b90, "_sigsuspend", 1),
SYSCALL_DESC_ENTRY(0xffffffff80853e90, "_sigtimedwait", 3),
SYSCALL_DESC_ENTRY(0xffffffff80853880, "_sigaction", 4),
SYSCALL_DESC_ENTRY(0xffffffff80853e80, "_sigreturn", 0),
SYSCALL_DESC_ENTRY(0xffffffff8063bd60, "chdir", 1),
SYSCALL_DESC_ENTRY(0xffffffff8063bdd0, "_getcwd", 2),
{0},
SYSCALL_DESC_ENTRY(0xffffffff80875a70, "getpid", 0),
SYSCALL_DESC_ENTRY(0xffffffff80875a90, "getppid", 0),
SYSCALL_DESC_ENTRY(0xffffffff80854170, "_waitpid", 3),
SYSCALL_DESC_ENTRY(0xffffffff809a8e10, "sysctl", 6),
SYSCALL_DESC_ENTRY(0xffffffff8082eed0, "_schedPxInfoGet", 2),
SYSCALL_DESC_ENTRY(0xffffffff80853a10, "sigaltstack", 2),
SYSCALL_DESC_ENTRY(0xffffffff8063bf40, "_unlink", 1),
SYSCALL_DESC_ENTRY(0xffffffff8063bfa0, "_link", 2),
SYSCALL_DESC_ENTRY(0xffffffff8063c020, "_fsync", 1),
SYSCALL_DESC_ENTRY(0xffffffff8063c040, "_fdatasync", 1),
SYSCALL_DESC_ENTRY(0xffffffff8063c060, "_rename", 2),
SYSCALL_DESC_ENTRY(0xffffffff8063c0e0, "_fpathconf", 2),
SYSCALL_DESC_ENTRY(0xffffffff8063c110, "_pathconf", 2),
SYSCALL_DESC_ENTRY(0xffffffff8063c170, "_access", 2),
SYSCALL_DESC_ENTRY(0xffffffff8063c1d0, "_chmod", 2),
SYSCALL_DESC_ENTRY(0xffffffff80857c70, "pxTraceCreation", 5),
SYSCALL_DESC_ENTRY(0xffffffff80858050, "pxTraceCtl", 7),
SYSCALL_DESC_ENTRY(0xffffffff80857ed0, "pxTraceEvent", 7),
SYSCALL_DESC_ENTRY(0xffffffff80858370, "pxTraceEventNameQuery", 7),
SYSCALL_DESC_ENTRY(0xffffffff808588e0, "pxTraceLog", 4),
SYSCALL_DESC_ENTRY(0xffffffff808585e0, "pxTraceEventGet", 8)
};
int add_hook(void)
{
syscallGroupRegister(8, "MYHOOK", 64, (SYSCALL_RTN_TBL_ENTRY *)&test, 1);
return OK;
}
app.c
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char **argv)
{
int fd = -1;
fd = open("main", O_RDONLY);
close(fd);
return 0;
}
編譯
$ wr-cc app.c -o app $ wr-cc main.c -o main -dkm
執行
-> ld < main -> add_hook -> cmd [vxWorks *]# app file path: main [vxWorks *]# C -> unld "main"