<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>inline</title>
	<atom:link href="https://www.aitaocui.cn/tag/230595/feed" rel="self" type="application/rss+xml" />
	<link>https://www.aitaocui.cn</link>
	<description>翡翠玉石爱好者聚集地</description>
	<lastBuildDate>Sat, 26 Nov 2022 23:10:22 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>

<image>
	<url>https://www.aitaocui.cn/wp-content/uploads/2022/11/taocui.png</url>
	<title>inline</title>
	<link>https://www.aitaocui.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>inline(内联函数)</title>
		<link>https://www.aitaocui.cn/article/342365.html</link>
					<comments>https://www.aitaocui.cn/article/342365.html#respond</comments>
		
		<dc:creator><![CDATA[人非生而知之者]]></dc:creator>
		<pubDate>Sat, 26 Nov 2022 23:10:22 +0000</pubDate>
				<category><![CDATA[知识]]></category>
		<category><![CDATA[inline]]></category>
		<guid isPermaLink="false">https://www.aitaocui.cn/?p=342365</guid>

					<description><![CDATA[inline是C++关键字，在函数声明或定义中，函数返回类型前加上关键字inline，即可以把函数指定为内联函数。这样可以解决一些频繁调用的函数大量消耗栈空间（栈内存）的问题。关键...]]></description>
										<content:encoded><![CDATA[</p>
<article>
<p>inline是C++关键字，在函数声明或定义中，函数返回类型前加上关键字inline，即可以把函数指定为内联函数。这样可以解决一些频繁调用的函数大量消耗栈空间（栈内存）的问题。关键字inline必须与函数定义放在一起才能使函数成为内联函数，仅仅将inline放在函数声明前面不起任何作用。inline是一种“用于实现”的关键字，而不是一种“用于声明”的关键字。</p>
</article>
<article>
<h1>使用方法</h1>
<p>简单提一下inline 的使用吧：</p>
<p>1.在类中定义这种函数：</p>
<p>class ClassName{</p>
<p>&#8230;..</p>
<p>&#8230;.</p>
<p>INT GetWidth(){return m_lPicWidth;}; // 如果在类中直接定义，不需要用inline修饰,编译器自动化为内联函数</p>
<p>&#8230;. //此说法在《C++ Primer》中提及</p>
<p>&#8230;.</p>
<p>}</p>
<p>2.在类外定义前加inline关键字:</p>
<p>class Account {</p>
<p>public:</p>
<p>Account(double initial_balance) { balance = initial_balance; } //与1相同</p>
<p>double GetBalance(); //在类中声明</p>
<p>double Deposit( double Amount );</p>
<p>double Withdraw( double Amount );</p>
<p>private:</p>
<p>double balance;</p>
<p>};</p>
<p>inline double Account::GetBalance() { return balance; } //在类外定义时添加inline关键字</p>
<p>inline double Account::Deposit( double Amount ) { return ( balance += Amount ); }</p>
<p>inline double Account::Withdraw( double Amount ) { return ( balance -= Amount ); }</p>
<p>此外还有一些规则需注意:</p>
<p>1、inline说明对编译器来说只是一种建议，编译器可以选择忽略这个建议。比如，你将一个长达1000多行的函数指定为inline，编译器就会忽略这个inline，将这个函数还原成普通函数。</p>
<p>2、在调用内联函数时，要保证内联函数的定义让编译器&quot;看&quot;到，也就是说内联函数的定义要在头文件中，这与通常的函数定义不一样。但如果你习惯将函数定义放在CPP文件中，或者想让头文件更简洁一点，可这样做:</p>
<p>//SomeInline.h中</p>
<p>#ifndef SOMEINLINE_H</p>
<p>#define SOMEINLINE_H</p>
<p>inline Type Example(void);</p>
<p>//&#8230;&#8230;..其他函数的声明</p>
<p>#include“SomeInlie.cpp” //源文件后缀名随编译器而定</p>
<p>#endif</p>
<p>//SomeInline.cpp中</p>
<p>#include&quot;SomeInline.h&quot;</p>
<p>Type Example(void)</p>
<p>{</p>
<p>//&#8230;&#8230;&#8230;.</p>
<p>}</p>
<p>//&#8230;&#8230;&#8230;&#8230;&#8230;其他函数的定义</p>
<p>以上方法是通用、有效的，可放心使用，不必担心在头文件包含CPP文件会导致编译错误。</p>
<h2 id="a-2bc5bc7c">CSS</h2>
<p>display:inline</p>
<p>它可以让行内显示为块的元素，变为行内显示，例如</p>
<p>DIV1</p>
<p>DIV2</p>
<p>这里DIV1和DIV2分别占一行，但是你给他们加上属性后变了</p>
<p>DIV1 DIV2</p>
<p>DIV1和DIV2这时候显示在同一行了，试试看吧</p>
<p>和 display:inline 对应的是 display:block，block 会让应用了该 CSS 属性的 HTML 标记变成块级别元素，例如 SPAN 是行内显示的，但是你加了 display:block 属性就不一样了</p>
<p>[font style= &quot;display:block &quot;] SPAN1 [/font]</p>
<p>[font style= &quot;display:block &quot;] SPAN2 [/font]</p>
<p>block一般一个块占一行，除非float</p>
<p>inline是自动排为一行，就象段内的文字一样，可成为多行。</p>
<p>display:inline比较经典的用法是用在下的 </p>
<ul>
<li>
<div>中</div>
</li>
</ul>
<p>display:inline 对应不显示为 display:none</p>
<p>display:block 对应不显示为 hidden</p>
<p>说通俗点 样式为none的元素不占位置,而样式为hidden的元素虽然不显示但还是占地方</p>
<h2 id="a-5bd2cfb6">InLinehook</h2>
<p>字面含义</p>
<p>从字面上来理解，inline hook即内置hook，内部跳转hook，从内部联结到其它函数的hook。</p>
<p>指直接修改目标函数的指令，用一个跳转或者其他指令来达到挂钩（执行自写的其他函数）的目的。</p>
<p>这是相对一般的函数地址hook来说，一般的hook方法是指是在调用函数处修改函数地址，而不是在原来的函数体里面做修改。如：CALL 0x10000001 改成 CALL 0x10000002</p>
<p>还有就是函数地址列表hook。在程序的不同层面有不同的函数地址清单，如应用层的IAT表，驱动层的SSDT和IDT表，此即在上述函数地址清单中修改函数地址。函数在应用层的IAT表地址如同函数的含糊地址，如X小区，驱动层的如详细地址，如X栋X室，驱动的保护就如同小区保安起到保护作用。</p>
<p>比喻</p>
<p>如果把一个程序比作一本书，那么：</p>
<p>inline hook如同修改内页内容，写上（由此处跳转到XXX页），位置在开始的叫浅层inline hook，靠后的则为深层inline hook。</p>
<p>SSDT hook、IDT hook和IAT hook如同修改目录中章节的地址，把XXX节 xxx页改为yyy页。</p>
<p>比较</p>
<p>一般来说，改地址的hook，其使用时比较稳定。 inline hook 更加高级一点，一般也跟难以被发现。</p>
<h1>附</h1>
<p>inline：内置，在线的，联机的</p>
</article>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.aitaocui.cn/article/342365.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
