草庐IT

ASSEMBLY

全部标签

有人可以解释一下 __declspec(naked) 吗?

我正在考虑将为Windows编写的脚本引擎移植到Linux;它适用于Winamp的可视化平台AVS。我不确定目前是否有可能。据我所知,代码正在获取C函数nseel_asm_atan和nseel_asm_atan_end的地址,并将它们存储在一个表中,它可以在代码执行期间引用该表。我查看了MS的文档,但不确定__declspec(naked)的真正作用。文档中提到的prolog和epilog代码是什么?这与Windows调用约定有关吗?这是可移植的吗?知道使用类似技术的任何基于Linux的示例吗?staticdouble(*__atan)(double)=&atan;__declspec

linux - 使用自定义引导加载程序创建可引导 ISO 镜像

我正在尝试将我用汇编语言编写的引导加载程序转换为ISO镜像文件。以下是来自MikeOS的代码Bootstrap。这是我的引导加载程序代码:BITS16start:movax,07C0h;Setup4Kstackspaceafterthisbootloaderaddax,288;(4096+512)/16bytesperparagraphmovss,axmovsp,4096movax,07C0h;Setdatasegmenttowherewe'reloadedmovds,axmovsi,text_string;PutstringpositionintoSIcallprint_string

linux - 使用自定义引导加载程序创建可引导 ISO 镜像

我正在尝试将我用汇编语言编写的引导加载程序转换为ISO镜像文件。以下是来自MikeOS的代码Bootstrap。这是我的引导加载程序代码:BITS16start:movax,07C0h;Setup4Kstackspaceafterthisbootloaderaddax,288;(4096+512)/16bytesperparagraphmovss,axmovsp,4096movax,07C0h;Setdatasegmenttowherewe'reloadedmovds,axmovsi,text_string;PutstringpositionintoSIcallprint_string

Linux 内核汇编和逻辑

我的问题有点奇怪,但我会尽力解释。看看linux内核的语言,我得到了C和汇编,即使我读到一篇文章说[quote]Unix的第二次迭代完全用C编写[/quote]我认为这是误导,但当我说内核有汇编代码时,我得到了2个开头的问题内核中有哪些汇编文件,它们的用途是什么?汇编是依赖于架构的,所以linux如何安装在多个CPU架构上如果linux内核真的完全用C编写,那么它如何获得编译所需的GCC?我做了一个完整的find/-name*.s并在/usr/src/linux-headers-`uname-r/中的某处获得了一个汇编文件(asm-offset.s)不知何故,我认为这对GCC的工作没有

Linux 内核汇编和逻辑

我的问题有点奇怪,但我会尽力解释。看看linux内核的语言,我得到了C和汇编,即使我读到一篇文章说[quote]Unix的第二次迭代完全用C编写[/quote]我认为这是误导,但当我说内核有汇编代码时,我得到了2个开头的问题内核中有哪些汇编文件,它们的用途是什么?汇编是依赖于架构的,所以linux如何安装在多个CPU架构上如果linux内核真的完全用C编写,那么它如何获得编译所需的GCC?我做了一个完整的find/-name*.s并在/usr/src/linux-headers-`uname-r/中的某处获得了一个汇编文件(asm-offset.s)不知何故,我认为这对GCC的工作没有

c - 如何在 Linux 中击败核心 i3/i7 中的硬件预取器

我正在尝试找到一种方法来击败硬件预取器以检测流模式并以随机顺序访问4KB数据这样它就不会被H/w预取器检测到和预取。最初我想以随机模式访问所有偶数索引数据,因为H/w预取器预取下一个缓存行总是(所以当我访问偶数索引时,下一个奇数索引数据已经被预取)。我编写代码以随机模式访问所有偶数索引数据,但结果表明预取器检测到该模式(不知道如何?没有固定步幅,都是随机步幅)我正在调查发生这种情况的原因,然后我在Intel中找到了这篇文章;https://software.intel.com/en-us/forums/topic/473493根据JohnD.McCalpin博士的说法,“Bandwid

c - 如何在 Linux 中击败核心 i3/i7 中的硬件预取器

我正在尝试找到一种方法来击败硬件预取器以检测流模式并以随机顺序访问4KB数据这样它就不会被H/w预取器检测到和预取。最初我想以随机模式访问所有偶数索引数据,因为H/w预取器预取下一个缓存行总是(所以当我访问偶数索引时,下一个奇数索引数据已经被预取)。我编写代码以随机模式访问所有偶数索引数据,但结果表明预取器检测到该模式(不知道如何?没有固定步幅,都是随机步幅)我正在调查发生这种情况的原因,然后我在Intel中找到了这篇文章;https://software.intel.com/en-us/forums/topic/473493根据JohnD.McCalpin博士的说法,“Bandwid

c - 如果我要用汇编编写程序,这个 HelloWorld 汇编代码的哪些部分是必不可少的?

我有这个简短的helloworld程序:#includestaticconstchar*msg="Helloworld";intmain(){printf("%s\n",msg);return0;}我用gcc编译成如下汇编代码:.file"hello_world.c".section.rodata.LC0:.string"Helloworld".data.align4.typemsg,@object.sizemsg,4msg:.long.LC0.text.globlmain.typemain,@functionmain:.LFB0:.cfi_startprocpushl%ebp.cfi

c - 如果我要用汇编编写程序,这个 HelloWorld 汇编代码的哪些部分是必不可少的?

我有这个简短的helloworld程序:#includestaticconstchar*msg="Helloworld";intmain(){printf("%s\n",msg);return0;}我用gcc编译成如下汇编代码:.file"hello_world.c".section.rodata.LC0:.string"Helloworld".data.align4.typemsg,@object.sizemsg,4msg:.long.LC0.text.globlmain.typemain,@functionmain:.LFB0:.cfi_startprocpushl%ebp.cfi

linux - 自修改代码总是在 Linux 上出现段错误

我找到了一篇关于自修改代码的文章并尝试做一些例子,但我总是遇到段错误。据我所知,存在内存权限违规。代码段是(r)ead/e(x)ecute,因此写入结果的尝试导致此错误。有没有办法通过在运行时或之前更改内存权限来测试程序?我使用的是linux,示例是用GAS汇编语言编写的。.externmemcpy.section.datastring:.asciz"whatever"string_end:.section.bss.lcommbuf,string_end-string.section.text.globlmainmain:callchangermov$string,%edxlabel: