English 中文(简体)
C memcpy (a)
原标题:C memcpy() a function
  • 时间:2009-11-11 17:11:33
  •  标签:

是否有计算职能规模的方法? 我有一个职能点,我必须用薄膜复制整个功能。 我不得不占用一些面积,并知道面积为3厘米。 我知道<代码>sizeof(功能) don t work。 你们是否有任何建议?

问题回答

即使有办法使(......)规模达到功能,但如果你试图用一个已复制到另一个记忆区的文本,则可能仍然失败。 如果汇编者在当地或长期跳跃到特定的记忆地点,那么什么。 你们只能传承一个功能,期望它能够运行。 该办公室可以这样做,但拥有它所需要的全部信息。


我将问,业务系统如何做到这一点,但现在我想到的是,当监督厅的变动通常会翻整整整页,处理记忆,从而把地址变成一页/倒数。 我不敢肯定,甚至非洲顾问办也总是在记忆中发挥单一功能。


Even in the case of the OS moving a function around in memory, the function itself must be declared or otherwise compiled/assembled to permit such action, usually through a pragma that indicates the code is relocatable. All the memory references need to be relative to its own stack frame (aka local variables) or include some sort of segment+offset structure such that the CPU, either directly or at the behest of the OS, can pick the appropriate segment value. If there was a linker involved in creating the app, the app may have to be re-linked to account for the new function address.

现有各种运行系统可提供自己的32个轨道地址空间,但适用于整个过程和任何儿童校对,而不是个人功能。

正如其他地方提到的那样,你确实需要一种语言,即功能是头等物体,否则你就会从头.。

You want to copy a function? I do not think that this is possible in C generally. Assume, you have a Harvard-Architecture microcontroller, where code (in other words "functions") is located in ROM. In this case you cannot do that at all. Also I know several compilers and linkers, which do optimization on file (not only function level). This results in opcode, where parts of C functions are mixed into each other.

我认为唯一可能的方法是:

  • 形成你的职责范围(例如,自行汇编/评估)。

  • 将该代码编成一组。

  • 利用适当的职能联络点,指出这一阵列,以指定这一职能。

  • 现在,你可以开展所有业务,与典型的“数据”一样。

但除此之外: 你是否考虑重新设计你的软件,以便你不需要复制功能内容?

我不理解你试图完成的工作,但假定你会汇编——fPIC,没有你的职能,没有其他职能要求,不能从外部职能获取数据,你甚至会放弃这样做。 我这样说,最安全的可能性是,将支持职能的最大规模限制在1千兆字节和公正的转让上,并且无视拖拉机。

如果你真的需要知道某项职能的确切规模,就把你的编目和编目挂在外。 这一点应当从x86的角度来看待:

:your_func_epilogue
mov esp, ebp
pop ebp
ret
:end_of_func

;expect a varying length run of NOPs here

:next_func_prologue
push ebp
mov ebp, esp

公布编辑的输出结果,以检查,并按相应的组别进行搜索。 仅靠流行病学可能就足够了,但是如果搜索顺序太早,例如在功能所含数据中,所有这一切都可能爆炸。 寻求下一次对话也可能使你陷入困境,即认为。

现在,我无视我所写的一切,因为你显然试图以错误和内在不安全的方式解决这一问题。 请描述一下大的照片,WHY是你试图这样做的,看看我们是否可以采取完全不同的做法。

这里也进行了类似的讨论:

http://www.mothersterpoint.com/access-code-size-Function-c-t95049.html

他们提议,在你的职责范围扩大后,建立婚礼功能,然后把记忆点带给双方。 但是,你们需要放弃汇编者优化工作。

如果你有海合会;=4.4,你可以尝试改变你最优化的职能,特别是使用 #:

另一项拟议解决办法并非完全照搬这一功能,而是确定你希望复制该功能的地点。

亲爱!

如果你的联系人不做全球优化,那么仅仅计算职能点与下一个职能地址之间的差别。

请注意,如果贵国的代码为可调用的编号,则该功能的复制将产生一些可援引的东西(即该法典中的所有地址必须是相对的,例如分支;全球的工作,尽管它们没有变动)。

象你一样,你希望从车轮司机向用户空间发出呼吁,这样,当某些同步的工作完成时,它就可以告知用户空间。

这可能是明智的,因为它使一个固定用户空间图书馆可能做事,但对于舱面/用户空间界面来说,这是错误的。 即使你设法把你的职能法典合并到地库中,即使你使它具有适当的地位,它仍然是错误的,因为地库和用户空间法在根本不同的情况下执行。 仅举一个可能产生问题的分歧的例子,如果由于一页的蒸发,在舱内发生页错,那就会造成ker,而不是在纸上抹掉。

正确的办法是,当单人工作完成时,方言可以读懂某些档案(就你而言,这名档案管理员几乎肯定是你的司机提供的特性装置)。 用户空间程序可等到这一活动时再使用<>条码/代码>/<条码>,或<条码>><>>>。 用户空间程序可在必要时设定文件说明人不作锁,而且基本上只使用所有标准UNIX工具处理本案。 这毕竟是如何处理网络备案的不连贯性质(而且几乎是其他不相同的案件)。

如果你需要提供关于所发生事件的更多信息,则可在可读文档描述器上read时向用户空间程序提供。

职务只是你可以复制的。 交叉参比/标志是什么? 当然,你可以采取标准路线“组合使用”一揽子措施,并对你的双手施以酷刑,但这是你想要的吗?

如果你只是试图取代肉类手术,就看着LD_PRELOAD机械师。

我可以想办法完成你想要的东西,但我得 tell告诉你,因为它对语言的可怕滥用。

一种比分散优化和依靠汇编者维持职能秩序的更清洁的方法是将这一职能(或需要复制的一系列职能)安排在自己的部门。 它是汇编者和联系人,如果你在所复制的职能之间要求,你也需要使用相对地址。 对于那些要求你这样做的人来说,在需要更新操作守则的嵌入式系统中,这是共同的要求。

正如我所能够告诉的那样,最初的海报想要做的是具体执行,因此无法携带;这偏离了C++标准对投放点人到功能问题所说的话,而不是C标准,但这应当足够好。

在有些环境中,有些编汇人可能想做什么(即,复制点对机指出的记忆的一部分,以至其他地点,或许由小公司分配,从而把这个障碍推到点对功能,并直接叫它)。 但是,它赢得的却是便携式的,可能不是一个问题。 找到这一记忆库所需的规模本身取决于环境,也取决于汇编者,而且很可能需要一些粗略的弧内障(例如,扫描回归密码的记忆,或通过一个组装机管理记忆)。 同样,具体执行,而且极不适宜。 再者,原职位可能无关紧要。

与潜在解决办法的联系似乎都利用了具体执行行为,我甚至不敢肯定它们会做些什么,但它们可能适合禁止化学武器组织。

我在把这匹马毒打死后,很想知道,为什么反对派想要这样做。 即便在目标环境中工作,也非常脆弱(例如,可以打破汇编者选择、汇编者版本、编码重构等的变化)。 我感到高兴的是,在这种魔法是必要的情况下,我没有做任何工作(假定是这样)。

我在新台上这样做了,当时,我把一些低水平的空投从闪光(16个轨道接入速度放慢了记忆)到高速度的工作空间(32个轨道接入,至少比快两倍)。 这样做的办法是,在我想要复制的职能之后,立即使用该职能地址:面积=(int)(NextFuncPtr - SourceFuncPtr)。 这确实行之有效,但显然必须在所有平台上(不过,在视窗上不工作)。

我认为,解决办法如下。

具体来说:如果你想要知道方案a.c的(func)规模,并在职能前后有指标。

撰写一份将编成目标格式(cc-o)的附则,确保不会删除程序前声明。 以后,你需要从物体档案中计算其大小。

现在寻求你的两项指标,并发现两者之间的编码规模。





相关问题