Android 系统调用实现函数功能--SVC指令的实现与检测

2023-05-16

0x0 简述:
arm android中通过一些反编译的工具分析ELF文件时,根据一些导入的系统函数可以很轻松的找到一些功能代码的实现:

这里写图片描述

这里写图片描述

查看libc中分析这些函数的实现:
这里写图片描述
arm中通过SVC指令实现的系统调用

因此利用这一点应用中加入了类似的实现操作,隐蔽掉调用系统函数的符号,增加分析难度:
这里写图片描述

0x1 实现:
以getpid为例

修改调用方式,获取pid原本通过系统API getpid获取,修改为:
int xxxxxgetpid();

从源码中获取getpid汇编实现过程,6.0路径如下:
bionic/libc/arch-arm/syscalls/_getpid.S:

#include <private/bionic_asm.h>

ENTRY(__getpid)
    mov     ip, r7
    ldr     r7, =__NR_getpid
    swi     #0
    mov     r7, ip
    cmn     r0, #(MAX_ERRNO + 1)
    bxls    lr
    neg     r0, r0
    b       __set_errno_internal
END(__getpid)

ENTRY和END为宏定义,后面包含对应的符号地址,因此头文件对应的定义编译为C的符号,在头文件添加int xxxxxgetpid();即可,对应汇编中的符号地址。
LOCAL_SRC_FILES中加入.S文件,如果想插入到函数中间,函数设置为inline。

IDA查看:

 sub_172C   ; DATA XREF: sub_2D98+4o
.text:0000172C           ; .text:off_2DA0o
.text:0000172C                 MOV     R12, R7
.text:00001730                 MOV     R7, #0x14
.text:00001734                 SVC     0
.text:00001738                 MOV     R7, R12
.text:0000173C                 CMN     R0, #0x1000
.text:00001740                 BXLS    LR
.text:00001744                 RSB     R0, R0, #0
.text:00001748                 B       sub_2E14

0x2 检测
攻防永远都是对立与互存的,既然有通过这种方式去屏蔽掉对导入系统函数的检测,也当然有用其他方式去检测这些导入的函数了。

利用调用SVC指令的特征去实现了一个简单检测的ida脚本,有误差和不准确的地方,对我来说够用了,可以参考一二。

脚本代码:

sysCallTab = {}

sysCallTab[0] = "__NR_restart_syscall"
sysCallTab[1] = "__NR_exit"
sysCallTab[2] = "__NR_fork"
sysCallTab[3] = "__NR_read"
sysCallTab[4] = "__NR_write"
sysCallTab[5] = "__NR_open"
sysCallTab[6] = "__NR_close"
sysCallTab[8] = "__NR_creat"
sysCallTab[9] = "__NR_link"
sysCallTab[10] = "__NR_unlink"
sysCallTab[11] = "__NR_execve"
sysCallTab[12] = "__NR_chdir"
sysCallTab[13] = "__NR_time"
sysCallTab[14] = "__NR_mknod"
sysCallTab[15] = "__NR_chmod"
sysCallTab[16] = "__NR_lchown"
sysCallTab[19] = "__NR_lseek"
sysCallTab[20] = "__NR_getpid"
sysCallTab[21] = "__NR_mount"
sysCallTab[22] = "__NR_umount"
sysCallTab[23] = "__NR_setuid"
sysCallTab[24] = "__NR_getuid"
sysCallTab[25] = "__NR_stime"
sysCallTab[26] = "__NR_ptrace"
sysCallTab[27] = "__NR_alarm"
sysCallTab[29] = "__NR_pause"
sysCallTab[30] = "__NR_utime"
sysCallTab[33] = "__NR_access"
sysCallTab[34] = "__NR_nice"
sysCallTab[36] = "__NR_sync"
sysCallTab[37] = "__NR_kill"
sysCallTab[38] = "__NR_rename"
sysCallTab[39] = "__NR_mkdir"
sysCallTab[40] = "__NR_rmdir"
sysCallTab[41] = "__NR_dup"
sysCallTab[42] = "__NR_pipe"
sysCallTab[43] = "__NR_times"
sysCallTab[45] = "__NR_brk"
sysCallTab[46] = "__NR_setgid"
sysCallTab[47] = "__NR_getgid"
sysCallTab[49] = "__NR_geteuid"
sysCallTab[50] = "__NR_getegid"
sysCallTab[51] = "__NR_acct"
sysCallTab[52] = "__NR_umount2"
sysCallTab[54] = "__NR_ioctl"
sysCallTab[55] = "__NR_fcntl"
sysCallTab[57] = "__NR_setpgid"
sysCallTab[60] = "__NR_umask"
sysCallTab[61] = "__NR_chroot"
sysCallTab[62] = "__NR_ustat"
sysCallTab[63] = "__NR_dup2"
sysCallTab[64] = "__NR_getppid"
sysCallTab[65] = "__NR_getpgrp"
sysCallTab[66] = "__NR_setsid"
sysCallTab[67] = "__NR_sigaction"
sysCallTab[70] = "__NR_setreuid"
sysCallTab[71] = "__NR_setregid"
sysCallTab[72] = "__NR_sigsuspend"
sysCallTab[73] = "__NR_sigpending"
sysCallTab[74] = "__NR_sethostname"
sysCallTab[75] = "__NR_setrlimit"
sysCallTab[76] = "__NR_getrlimit"
sysCallTab[77] = "__NR_getrusage"
sysCallTab[78] = "__NR_gettimeofday"
sysCallTab[79] = "__NR_settimeofday"
sysCallTab[80] = "__NR_getgroups"
sysCallTab[81] = "__NR_setgroups"
sysCallTab[82] = "__NR_select"
sysCallTab[83] = "__NR_symlink"
sysCallTab[85] = "__NR_readlink"
sysCallTab[86] = "__NR_uselib"
sysCallTab[87] = "__NR_swapon"
sysCallTab[88] = "__NR_reboot"
sysCallTab[89] = "__NR_readdir"
sysCallTab[90] = "__NR_mmap"
sysCallTab[91] = "__NR_munmap"
sysCallTab[92] = "__NR_truncate"
sysCallTab[93] = "__NR_ftruncate"
sysCallTab[94] = "__NR_fchmod"
sysCallTab[95] = "__NR_fchown"
sysCallTab[96] = "__NR_getpriority"
sysCallTab[97] = "__NR_setpriority"
sysCallTab[99] = "__NR_statfs"
sysCallTab[100] = "__NR_fstatfs"
sysCallTab[102] = "__NR_socketcall"
sysCallTab[103] = "__NR_syslog"
sysCallTab[104] = "__NR_setitimer"
sysCallTab[105] = "__NR_getitimer"
sysCallTab[106] = "__NR_stat"
sysCallTab[107] = "__NR_lstat"
sysCallTab[108] = "__NR_fstat"
sysCallTab[111] = "__NR_vhangup"
sysCallTab[113] = "__NR_syscall"
sysCallTab[114] = "__NR_wait4"
sysCallTab[115] = "__NR_swapoff"
sysCallTab[116] = "__NR_sysinfo"
sysCallTab[117] = "__NR_ipc"
sysCallTab[118] = "__NR_fsync"
sysCallTab[119] = "__NR_sigreturn"
sysCallTab[120] = "__NR_clone"
sysCallTab[121] = "__NR_setdomainname"
sysCallTab[122] = "__NR_uname"
sysCallTab[124] = "__NR_adjtimex"
sysCallTab[125] = "__NR_mprotect"
sysCallTab[126] = "__NR_sigprocmask"
sysCallTab[128] = "__NR_init_module"
sysCallTab[129] = "__NR_delete_module"
sysCallTab[131] = "__NR_quotactl"
sysCallTab[132] = "__NR_getpgid"
sysCallTab[133] = "__NR_fchdir"
sysCallTab[134] = "__NR_bdflush"
sysCallTab[135] = "__NR_sysfs"
sysCallTab[136] = "__NR_personality"
sysCallTab[138] = "__NR_setfsuid"
sysCallTab[139] = "__NR_setfsgid"
sysCallTab[140] = "__NR__llseek"
sysCallTab[141] = "__NR_getdents"
sysCallTab[142] = "__NR__newselect"
sysCallTab[143] = "__NR_flock"
sysCallTab[144] = "__NR_msync"
sysCallTab[145] = "__NR_readv"
sysCallTab[146] = "__NR_writev"
sysCallTab[147] = "__NR_getsid"
sysCallTab[148] = "__NR_fdatasync"
sysCallTab[149] = "__NR__sysctl"
sysCallTab[150] = "__NR_mlock"
sysCallTab[151] = "__NR_munlock"
sysCallTab[152] = "__NR_mlockall"
sysCallTab[153] = "__NR_munlockall"
sysCallTab[154] = "__NR_sched_setparam"
sysCallTab[155] = "__NR_sched_getparam"
sysCallTab[156] = "__NR_sched_setscheduler"
sysCallTab[157] = "__NR_sched_getscheduler"
sysCallTab[158] = "__NR_sched_yield"
sysCallTab[159] = "__NR_sched_get_priority_max"
sysCallTab[160] = "__NR_sched_get_priority_min"
sysCallTab[161] = "__NR_sched_rr_get_interval"
sysCallTab[162] = "__NR_nanosleep"
sysCallTab[163] = "__NR_mremap"
sysCallTab[164] = "__NR_setresuid"
sysCallTab[165] = "__NR_getresuid"
sysCallTab[168] = "__NR_poll"
sysCallTab[169] = "__NR_nfsservctl"
sysCallTab[170] = "__NR_setresgid"
sysCallTab[171] = "__NR_getresgid"
sysCallTab[172] = "__NR_prctl"
sysCallTab[173] = "__NR_rt_sigreturn"
sysCallTab[174] = "__NR_rt_sigaction"
sysCallTab[175] = "__NR_rt_sigprocmask"
sysCallTab[176] = "__NR_rt_sigpending"
sysCallTab[177] = "__NR_rt_sigtimedwait"
sysCallTab[178] = "__NR_rt_sigqueueinfo"
sysCallTab[179] = "__NR_rt_sigsuspend"
sysCallTab[180] = "__NR_pread64"
sysCallTab[181] = "__NR_pwrite64"
sysCallTab[182] = "__NR_chown"
sysCallTab[183] = "__NR_getcwd"
sysCallTab[184] = "__NR_capget"
sysCallTab[185] = "__NR_capset"
sysCallTab[186] = "__NR_sigaltstack"
sysCallTab[187] = "__NR_sendfile"
sysCallTab[190] = "__NR_vfork"
sysCallTab[191] = "__NR_ugetrlimit"
sysCallTab[192] = "__NR_mmap2"
sysCallTab[193] = "__NR_truncate64"
sysCallTab[194] = "__NR_ftruncate64"
sysCallTab[195] = "__NR_stat64"
sysCallTab[196] = "__NR_lstat64"
sysCallTab[197] = "__NR_fstat64"
sysCallTab[198] = "__NR_lchown32"
sysCallTab[199] = "__NR_getuid32"
sysCallTab[200] = "__NR_getgid32"
sysCallTab[201] = "__NR_geteuid32"
sysCallTab[202] = "__NR_getegid32"
sysCallTab[203] = "__NR_setreuid32"
sysCallTab[204] = "__NR_setregid32"
sysCallTab[205] = "__NR_getgroups32"
sysCallTab[206] = "__NR_setgroups32"
sysCallTab[207] = "__NR_fchown32"
sysCallTab[208] = "__NR_setresuid32"
sysCallTab[209] = "__NR_getresuid32"
sysCallTab[210] = "__NR_setresgid32"
sysCallTab[211] = "__NR_getresgid32"
sysCallTab[212] = "__NR_chown32"
sysCallTab[213] = "__NR_setuid32"
sysCallTab[214] = "__NR_setgid32"
sysCallTab[215] = "__NR_setfsuid32"
sysCallTab[216] = "__NR_setfsgid32"
sysCallTab[217] = "__NR_getdents64"
sysCallTab[218] = "__NR_pivot_root"
sysCallTab[219] = "__NR_mincore"
sysCallTab[220] = "__NR_madvise"
sysCallTab[221] = "__NR_fcntl64"
sysCallTab[224] = "__NR_gettid"
sysCallTab[225] = "__NR_readahead"
sysCallTab[226] = "__NR_setxattr"
sysCallTab[227] = "__NR_lsetxattr"
sysCallTab[228] = "__NR_fsetxattr"
sysCallTab[229] = "__NR_getxattr"
sysCallTab[230] = "__NR_lgetxattr"
sysCallTab[231] = "__NR_fgetxattr"
sysCallTab[232] = "__NR_listxattr"
sysCallTab[233] = "__NR_llistxattr"
sysCallTab[234] = "__NR_flistxattr"
sysCallTab[235] = "__NR_removexattr"
sysCallTab[236] = "__NR_lremovexattr"
sysCallTab[237] = "__NR_fremovexattr"
sysCallTab[238] = "__NR_tkill"
sysCallTab[239] = "__NR_sendfile64"
sysCallTab[240] = "__NR_futex"
sysCallTab[241] = "__NR_sched_setaffinity"
sysCallTab[242] = "__NR_sched_getaffinity"
sysCallTab[243] = "__NR_io_setup"
sysCallTab[244] = "__NR_io_destroy"
sysCallTab[245] = "__NR_io_getevents"
sysCallTab[246] = "__NR_io_submit"
sysCallTab[247] = "__NR_io_cancel"
sysCallTab[248] = "__NR_exit_group"
sysCallTab[249] = "__NR_lookup_dcookie"
sysCallTab[250] = "__NR_epoll_create"
sysCallTab[251] = "__NR_epoll_ctl"
sysCallTab[252] = "__NR_epoll_wait"
sysCallTab[253] = "__NR_remap_file_pages"
sysCallTab[256] = "__NR_set_tid_address"
sysCallTab[257] = "__NR_timer_create"
sysCallTab[258] = "__NR_timer_settime"
sysCallTab[259] = "__NR_timer_gettime"
sysCallTab[260] = "__NR_timer_getoverrun"
sysCallTab[261] = "__NR_timer_delete"
sysCallTab[262] = "__NR_clock_settime"
sysCallTab[263] = "__NR_clock_gettime"
sysCallTab[264] = "__NR_clock_getres"
sysCallTab[265] = "__NR_clock_nanosleep"
sysCallTab[266] = "__NR_statfs64"
sysCallTab[267] = "__NR_fstatfs64"
sysCallTab[268] = "__NR_tgkill"
sysCallTab[269] = "__NR_utimes"
sysCallTab[270] = "__NR_arm_fadvise64_64"
sysCallTab[271] = "__NR_pciconfig_iobase"
sysCallTab[272] = "__NR_pciconfig_read"
sysCallTab[273] = "__NR_pciconfig_write"
sysCallTab[274] = "__NR_mq_open"
sysCallTab[275] = "__NR_mq_unlink"
sysCallTab[276] = "__NR_mq_timedsend"
sysCallTab[277] = "__NR_mq_timedreceive"
sysCallTab[278] = "__NR_mq_notify"
sysCallTab[279] = "__NR_mq_getsetattr"
sysCallTab[280] = "__NR_waitid"
sysCallTab[281] = "__NR_socket"
sysCallTab[282] = "__NR_bind"
sysCallTab[283] = "__NR_connect"
sysCallTab[284] = "__NR_listen"
sysCallTab[285] = "__NR_accept"
sysCallTab[286] = "__NR_getsockname"
sysCallTab[287] = "__NR_getpeername"
sysCallTab[288] = "__NR_socketpair"
sysCallTab[289] = "__NR_send"
sysCallTab[290] = "__NR_sendto"
sysCallTab[291] = "__NR_recv"
sysCallTab[292] = "__NR_recvfrom"
sysCallTab[293] = "__NR_shutdown"
sysCallTab[294] = "__NR_setsockopt"
sysCallTab[295] = "__NR_getsockopt"
sysCallTab[296] = "__NR_sendmsg"
sysCallTab[297] = "__NR_recvmsg"
sysCallTab[298] = "__NR_semop"
sysCallTab[299] = "__NR_semget"
sysCallTab[300] = "__NR_semctl"
sysCallTab[301] = "__NR_msgsnd"
sysCallTab[302] = "__NR_msgrcv"
sysCallTab[303] = "__NR_msgget"
sysCallTab[304] = "__NR_msgctl"
sysCallTab[305] = "__NR_shmat"
sysCallTab[306] = "__NR_shmdt"
sysCallTab[307] = "__NR_shmget"
sysCallTab[308] = "__NR_shmctl"
sysCallTab[309] = "__NR_add_key"
sysCallTab[310] = "__NR_request_key"
sysCallTab[311] = "__NR_keyctl"
sysCallTab[312] = "__NR_semtimedop"
sysCallTab[313] = "__NR_vserver"
sysCallTab[314] = "__NR_ioprio_set"
sysCallTab[315] = "__NR_ioprio_get"
sysCallTab[316] = "__NR_inotify_init"
sysCallTab[317] = "__NR_inotify_add_watch"
sysCallTab[318] = "__NR_inotify_rm_watch"
sysCallTab[319] = "__NR_mbind"
sysCallTab[320] = "__NR_get_mempolicy"
sysCallTab[321] = "__NR_set_mempolicy"
sysCallTab[322] = "__NR_openat"
sysCallTab[323] = "__NR_mkdirat"
sysCallTab[324] = "__NR_mknodat"
sysCallTab[325] = "__NR_fchownat"
sysCallTab[326] = "__NR_futimesat"
sysCallTab[327] = "__NR_fstatat64"
sysCallTab[328] = "__NR_unlinkat"
sysCallTab[329] = "__NR_renameat"
sysCallTab[330] = "__NR_linkat"
sysCallTab[331] = "__NR_symlinkat"
sysCallTab[332] = "__NR_readlinkat"
sysCallTab[333] = "__NR_fchmodat"
sysCallTab[334] = "__NR_faccessat"
sysCallTab[335] = "__NR_pselect6"
sysCallTab[336] = "__NR_ppoll"
sysCallTab[337] = "__NR_unshare"
sysCallTab[338] = "__NR_set_robust_list"
sysCallTab[339] = "__NR_get_robust_list"
sysCallTab[340] = "__NR_splice"
sysCallTab[341] = "__NR_arm_sync_file_range"
sysCallTab[342] = "__NR_tee"
sysCallTab[343] = "__NR_vmsplice"
sysCallTab[344] = "__NR_move_pages"
sysCallTab[345] = "__NR_getcpu"
sysCallTab[346] = "__NR_epoll_pwait"
sysCallTab[347] = "__NR_kexec_load"
sysCallTab[348] = "__NR_utimensat"
sysCallTab[349] = "__NR_signalfd"
sysCallTab[350] = "__NR_timerfd_create"
sysCallTab[351] = "__NR_eventfd"
sysCallTab[352] = "__NR_fallocate"
sysCallTab[353] = "__NR_timerfd_settime"
sysCallTab[354] = "__NR_timerfd_gettime"
sysCallTab[355] = "__NR_signalfd4"
sysCallTab[356] = "__NR_eventfd2"
sysCallTab[357] = "__NR_epoll_create1"
sysCallTab[358] = "__NR_dup3"
sysCallTab[359] = "__NR_pipe2"
sysCallTab[360] = "__NR_inotify_init1"
sysCallTab[361] = "__NR_preadv"
sysCallTab[362] = "__NR_pwritev"
sysCallTab[363] = "__NR_rt_tgsigqueueinfo"
sysCallTab[364] = "__NR_perf_event_open"
sysCallTab[365] = "__NR_recvmmsg"
sysCallTab[366] = "__NR_accept4"
sysCallTab[367] = "__NR_fanotify_init"
sysCallTab[368] = "__NR_fanotify_mark"
sysCallTab[369] = "__NR_prlimit64"
sysCallTab[370] = "__NR_name_to_handle_at"
sysCallTab[371] = "__NR_open_by_handle_at"
sysCallTab[372] = "__NR_clock_adjtime"
sysCallTab[373] = "__NR_syncfs"
sysCallTab[374] = "__NR_sendmmsg"
sysCallTab[375] = "__NR_setns"
sysCallTab[376] = "__NR_process_vm_readv"
sysCallTab[377] = "__NR_process_vm_writev"
sysCallTab[378] = "__NR_kcmp"
sysCallTab[379] = "__NR_finit_module"
sysCallTab[380] = "__NR_sched_setattr"
sysCallTab[381] = "__NR_sched_getattr"
sysCallTab[0x0f0001] = "__ARM_NR_breakpoint"
sysCallTab[0x0f0002] = "__ARM_NR_cacheflush"
sysCallTab[0x0f0003] = "__ARM_NR_usr26"
sysCallTab[0x0f0004] = "__ARM_NR_usr32"
sysCallTab[0x0f0005] = "__ARM_NR_set_tls"


textStart = 0x217E0
textEnd = 0x113680

for i in range(textStart,textEnd):
    if Byte(i) == 0xEF and \
       Byte(i-1) == 0x00 and \
       Byte(i-2) == 0x00 and \
       Byte(i-3) == 0x00 and \
       Byte(i-4) == 0xE3 and \
       Byte(i-5) == 0xA0:
       print "system call : %x"  %(Byte(i-7))
       print "addr : %x"  %(i)
       print "Func Name : %s" %(sysCallTab[Byte(i-7)])

前面的字典构造是从ndk中拿到系统调用表,代码段地址是硬编码的,需要修改,最后是打印的log效果:
这里写图片描述

转载请注明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 系统调用实现函数功能--SVC指令的实现与检测 的相关文章

随机推荐

  • 网页采集器-八爪鱼采集器

    八爪鱼采集器下载地址 xff1a http www bazhuayu cc download 八爪鱼采集器的注册地址 xff1a http www bazhuayu cc signup id 61 0e492e9c 6d80 4c2a a2
  • 考研书单与技巧

    书尽量在网上搞活动时买正版的 xff0c 这样也不贵 每科研究透一到两本书 xff0c 不要贪多 xff01 1 英语 xff1a xff08 积累的过程 xff0c 可以现在开始 xff0c 正好把六级过了 xff09 xff08 看好所
  • Ubuntu下程序进程堆栈信息——gstack

    前言 在Ubuntu下调试程序 xff0c 大部分是启动前使用gdb进行调试 xff0c 当然也有其他方法 xff0c 程序在运行中 xff0c 为了不打断程序正常运行 xff0c 也有一些工具进行调试 当前本文章旨在说明不安装其他额外程序
  • 9.针对Linux的8种最佳免费防病毒程序

    虽然Linux操作系统相当稳定和安全 xff0c 但它们可能不完全免疫威胁 所有计算机系统都可能遭受恶意软件和病毒攻击 xff0c 其中包括运行基于Linux的操作系统的系统 但是 xff0c 对于基于Linux的操作系统而言 xff0c
  • 有铅焊锡丝与无铅焊锡丝的性能差异大解析

    有铅焊锡丝与无铅焊锡丝是二大类差另外产物档次 xff0c 由于其金属成份差别造成熔点也差别 xff0c 一样通常有铅焊锡丝 的熔点在183度 xff0c 而无铅焊锡丝的熔点为217 227度 含铅量越少熔点将越高 由于焊锡丝的熔点温度进步之
  • linux中的系统调用

    前言 xff1a 本文只讨论linux中的系统调用 xff0c 不考虑windows等其他操作系统 两点 xff1a 1 系统调用时 xff0c 进程调用的是操作系统的内核函数 xff0c 不是进程 2 系统调用时 xff0c 会出现上下文
  • iView 日期选择器开始时间至结束时间限制

    需要考虑以下条件 开始时间和结束时间都不能大于当前时间开始时间不能大于结束时间 html lt FormItem label 61 34 起止时间 34 gt lt DatePicker type 61 34 date 34 v model
  • 树莓派3安装笔记(1)-安装操作系统Raspbian以及安装必要软件

    拿到了树莓派3后 xff0c 经过短暂的兴奋 xff0c 终于开始实战安装OS了 以下步骤基于官方的文章https www raspberrypi org learning software guide quickstart xff0c 选
  • C中需要检验其执行是否成功的函数(检验返回值)

    一 malloc xff08 xff09 因为当内存分配完了后 xff0c 就无法再分配空间了 xff0c 所以malloc失败也是有的是 xff0c 当malloc失败时返回NULL char s 61 void malloc SIZE
  • 《Java核心技术 卷1》

    目录 第4章 对象和类 lt 1 gt 静态字段和静态方法 lt 2 gt 初始化块 lt 3 gt 定义抽象类的对象变量 lt 4 gt hashCode方法得到散列码 lt 5 gt 虚拟机中的泛型类型信息 第五章 继承 第6章 接口
  • Kalibr 之 Camera-IMU 标定 (总结)

    Overview 欢迎访问 持续更新 xff1a https cgabc xyz posts db22c2e6 ethz asl kalibr is a toolbox that solves the following calibrati
  • VMware Workstations Pro 14 建立的虚拟机目录无法删除

    起因 通过VMware新建的RedHat虚拟机 xff0c 无意间的强制关机 xff0c 导致该虚拟机开机黑屏无法正常开启 xff0c 而且也关不掉 尝试删除自己创建的虚拟机目录文件 xff0c 提示文件被占用 通过任务管理器想要结束相关进
  • 矩形目标检测

    身份证 名片 书籍 考试试卷 答题卡这些检测目标都属于矩形目标检测 一 xff0c 现有技术 传统检测方法思路 xff1a 第一步 xff0c 采用滑动窗口 xff0c 设置不同的大小 xff0c 遍历图像 xff0c 得到一些目标的候选框
  • 几种常用通信协议

    通信可以形象的比喻成两个人讲话 xff1a 1 你说的别人得能听懂 xff1a 双方约定信号的协议 2 你的语速别人得能接受 xff1a 双方满足时序要求 一 IIC协议 xff1a 2C串行总线一般有两根信号线 xff0c 一根是双向的数
  • 基础篇——树莓派远程连接工具VNC不显示视频或摄像头画面解决方式

    背景故事 在树莓派上打开摄像头 xff0c 发现HDMI输出的桌面有画面 xff0c 但VNC这边没有画面 xff1b 之前有一次使用播放器播放视频也出现这个问题 xff0c 现记录解决方式 原因分析 VNC远程桌面并不是使用画面传输的方式
  • 穿越机(无人机航模)电池组装教程-电线接口

    对于动手能力强 xff0c 或者穷逼来说 xff0c 购买品牌电池玩穿越机 xff0c 或者其他航模 是非常浪费钱的 本着能自己干就不需要厂商辛苦的原则 电池组装 xff0c 我们可以自己做 非航模圈的电池 xff0c 一般都需要自带平衡电
  • UITextView

    闪退问题 scrollViewDidScroll 改为 scrollViewWillBeginDragging 禁止编辑 text setEditable NO 光标位置输入 64 param emoji 要输入的内容emoji和字符 vo
  • iView 滚动条样式

    滚动条样式 webkit scrollbar width 6px height 6px webkit scrollbar thumb background ccc webkit scrollbar track background e1e1
  • 英特尔 RealSense D415 + OpenCV 4.0 + VS2017 配置方法

    首先是Opencv 4 0 43 VS2017的配置过程 xff0c 网上已经有很多类似教程 xff0c 这里不再累赘 xff1a https www cnblogs com xinxue p 5766756 html 接下来开始配置D41
  • Android 系统调用实现函数功能--SVC指令的实现与检测

    0x0 简述 xff1a arm android中通过一些反编译的工具分析ELF文件时 xff0c 根据一些导入的系统函数可以很轻松的找到一些功能代码的实现 xff1a 查看libc中分析这些函数的实现 xff1a arm中通过SVC指令实