![](https://img-blog.csdnimg.cn/20200402100826690.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C
文章平均质量分 52
C/C++相关内容,但不包括算法。
源文雨
千载何方归梦,棹舟星河波开。
展开
-
C语言 intel架构处理器下利用gcc内联汇编 fcos 指令 实现三角函数计算小程序
Intel提供了丰富的浮点运算指令,下面就来实际试试看吧。原创 2022-10-30 23:30:54 · 423 阅读 · 0 评论 -
C语言 intel架构处理器下利用gcc内联汇编 xlat 指令 实现转换1字节十六进制数字到十进制
最近发现英特尔处理器有一个从bx指向的内存索引一个字节替换到al的xlat指令,遂编写此简单的转换程序以作练习。由于一次只能查找一字节,而紧凑bcd码最大占用2字节,因此需要用xlat索引2次。原创 2022-10-02 18:48:07 · 599 阅读 · 0 评论 -
利用cosmopolitan 编译在x86/x64架构下全平台可执行的C程序
Cosmopolitan Libc 使C语言实现像 Java 一样一次编写到处运行的特性,而且不需要 JVM 之类的虚拟机,代码是纯原生的。它可以在 Linux + Mac + Windows + FreeBSD + OpenBSD + NetBSD + BIOS 上执行,保持了C语言的高性能与小体积。有关其可移植的原理,改日另写一篇博客加以分析。HelloWorld非常简单,甚至不需要特别加以说明wget https://justine.lol/cosmopolitan/cosmopoli.原创 2022-03-30 23:30:16 · 2563 阅读 · 0 评论 -
C语言 使用数组索引与指针索引 在循环中对编译器优化的影响及耗时分析
C语言在访问数组时既可以使用如a[i]这样的下标方式,也可以使用*(a+i)这样的指针方式,理论上完全等价。但是在编译器对循环作优化时,对于指针方式的索引很有可能分析不彻底,因此相比数组索引耗时有所增加数组索引耗时#include <stdio.h>#include <stdlib.h>#include <time.h>unsigned long get_start_ms() { struct timespec ts; clock_gett.原创 2021-11-11 13:24:02 · 2187 阅读 · 0 评论 -
C语言 64位内联汇编 使用syscall系统调用 打印字符串
在64位系统下,系统调用可以直接通过syscall汇编指令实现,参数依次放入rax,rsi,rdi,rdx,返回值放入rax,因此通过改变这些寄存器的值即可方便地进行系统调用。Linux下打印字符串在Linux中,打印字符串对应的系统调用号为0x1,其原型为ssize_t write (int fd, const void * buf, size_t count);我们把字符串打印到控制台,即stdout,其fd为1。具体代码如下// ssize_t write (int fd @rax=1, .原创 2021-10-24 14:28:49 · 1836 阅读 · 0 评论 -
Go语言 cgo openwrt sdk 交叉编译报错 collect2: fatal error: cannot find ‘ld‘的解决办法
使用openwrt sdk交叉编译arm时报错如下CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=6 CC=arm-openwrt-linux-gcc CXX=arm-openwrt-linux-g++ AR=arm-openwrt-linux-ar go build -ldflags="-s -w" -o artifacts/zbpd-openwrt-linux-arm1176jzf-s+vfp....../usr/local/go/pkg/tool/linux_原创 2021-10-15 13:39:45 · 1965 阅读 · 2 评论 -
C语言 x86_64处理器下利用gcc内联汇编实现打印char的二进制编码
由于汇编语言针对特定机器,因此给出大端/小端机器下的2种不同代码实现思路使用shlb依次移出每一位到CF使用setb将CF的值转移到cl将rcx左移/循环右移8位,视机器不同而不同重复上述操作8次64位小端机器char* chr2bin(uint8_t ch, char buf[8*sizeof(char) + 1]) { buf[8*sizeof(char)] = 0; uint64_t a; asm( "xorq %0, %0\n\t" .原创 2021-07-03 00:03:27 · 690 阅读 · 2 评论 -
C语言 GCC编译的程序运行报错 malloc.c:2401: sysmalloc: Assertion 的分析解决
问题背景最近在写项目CMoe-Counter,在涉及到内存分配时报标题中错误。该错误有以下两点神奇的特征:MacOS下用clang编译后运行完全正常Ubuntu下用gcc编译后运行出上述断言错,但是在出错位置附近加puts("任意内容")后,运行完全正常错误分析因为出错位置附近加puts("任意内容")后,运行完全正常,且MacOS下clang编译后一切正常,初步推测该错误是由编译器不同引发。又由于断言在malloc,该错误必定与内存分配有关。由于问题代码段在添加puts等输出语句后问题消失,原创 2021-06-08 19:06:32 · 10789 阅读 · 3 评论 -
安卓 Android JNI 添加 lzma库 并用 Kotlin调用
添加源码在官网下载源码后,将其中的C目录拷贝到src/main/cpp,并重命名为lzma添加JNI函数删除lzma/Util,并新建文件夹lzma/jni,在其下写入如下文件lzma.c。该文件提供可供JNI调用的函数lzma(sf: String, df: String, isEncode: Boolean): String,以实现压缩/解压缩文件的功能//// lzma.c// Created by rumia on 2021/3/12.///* Edit from LzmaUtil原创 2021-03-13 00:23:33 · 630 阅读 · 0 评论 -
Cython创建并使用二维数组
因为cython无法使用形如int[8][9]这样的语句直接创建二维数组,因此我们另辟蹊径,使用malloc遍历x维度,手动分配内存空间pyx文件# cython: language_level=3#cython_2darr.pyx#fumiama 20201225from libc.string cimport memcpy, memsetfrom libc.stdlib cimport malloc, freecdef int** arrdef set(x: int, y: int,.原创 2020-12-25 20:17:13 · 1386 阅读 · 1 评论 -
C语言 将一个字符串中的浮点数全部变为整数
在压缩精简svg文件的路径时非常有用//fumiama 20200802//allFloat2Int.c#include <stdio.h>#include <string.h>#include <ctype.h>#define INPUT argv[1]int main(int argc, char **argv){ int len = strlen(INPUT); int i = 0; while(i < len){.原创 2020-08-02 14:07:49 · 647 阅读 · 0 评论 -
当 Visual Studio Installer 找不到安装时删除 Visual Studio的办法
摘自删除 Visual Studio如果遇到灾难性错误,并且无法修复或卸载 Visual Studio,可运行 InstallCleanup.exe工具,以删除 Visual Studio 2017 或 Visual Studio 2019 的所有已安装实例的安装文件和产品信息。警告InstallCleanup 工具仅作为修复或卸载失败时在不得已情况下采用的一种方法 。 此工具可能会从其他 Visual Studio 安装或其他产品中卸载功能,可能还需要修复或重新安装这些功能。运行 Inst.转载 2020-05-11 19:14:51 · 10485 阅读 · 1 评论 -
类比base64设计的base16384简介
由16384个汉字作为编码表的Base16384,输出的文本编码为utf16be。能节省更多空间且更容易发现二进制文件的规律。原创 2020-04-16 14:54:43 · 1398 阅读 · 0 评论 -
C语言实现简单按位(bit)读写
利用位运算符实现入栈一位,从文件加载多位,修改一位,读取一位,弹出一位原创 2020-04-13 00:30:02 · 8318 阅读 · 7 评论 -
C语言打印文件二进制与十六进制编码
二进制利用位运算实现,十六进制利用printf实现。原创 2020-04-12 23:25:02 · 773 阅读 · 0 评论 -
JNI修改版TinyHttpd
原源码有几个小问题,一个是路径写死了(有可能是安全方面的考虑),另一个最重要的是无法发送二进制格式文件,因此进行了修改,顺便还做成了后台,并且引入了JNI.原创 2020-03-30 10:22:15 · 188 阅读 · 0 评论 -
gcc对printf的优化
在printf输出的是一整行时,gcc将调用puts而不是printf。#include <stdio.h>int main(void){ printf("hello\n"); return 0;}对应汇编代码为然而,clang将仍然调用printf。...原创 2020-03-14 23:11:42 · 800 阅读 · 0 评论 -
从gcc生成的汇编代码看静态存储区变量与自动变量的区别(x64AT&T)
如果在临时存储区的数组或其他数据过多,超出了`rsp`的范围,则很有可能会出现诸如`segmentation fault`之类的错误。因此,有大量数据需要存储时,请使用静态变量。原创 2020-03-14 22:40:31 · 288 阅读 · 2 评论 -
C语言实现简单的微信推消息命令,调用Server酱
首先请前往Server酱的页面按要求注册。然后编译以下源码运行即可(注意修改POSTURL的SCKEY),源码的post请求部分参考了这篇文章另外,编译时请使用gcc source.c -l curl -o output否则会报错。以下是源码部分。#include <stdio.h>#include <string.h>#include <stdli...原创 2019-08-05 12:24:33 · 2642 阅读 · 0 评论 -
CentOS7环境下使用C语言统计指定端口流量
之前我在这篇文章里介绍了使用脚本方便地检测特定端口流量的方法。但是实际使用时发现脚本太过臃肿,执行效率不高,遂萌生出将其写为C程序的想法。下面提供我自己写的代码,以供参考。注:本程序在CentOS7x64下编译通过。#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include &l...原创 2019-07-23 13:28:06 · 392 阅读 · 0 评论